2011-06-24 23 views
5

Próbuję wysyłać proste dane do serwisu i potrzebuję "szorstkiego i gotowego" sposobu na zrobienie tego.Wysyłanie JSON na serwer przy użyciu jQuery

To, co mam tak daleko:

var emails = ['[email protected]', '[email protected]', '[email protected]']; 

var ruff_json = "{ 'emails': ["; 
for (i in emails) 
    ruff_json += ((i == 0) ? '' : ', ') + '\''+emails[i]+'\''; 

ruff_json += '] }'; 

jQuery.ajax({ 
    type: 'POST', 
    url: '1.php', 
    data: ruff_json, 
    dataType: "json", 
    timeout: 2000, 
    success: function(result){ 
     //do something 
    }, 
    error: function (xhr, ajaxOptions, thrownError){ 
     //do something 
    } 
}); 

Korzystanie Firebug, widzę, że dane zostały zaksięgowane na serwerze - jednak na serwerze, nie ma danych ($ _POST jest pusty) - Co ja robię źle?

+2

Powinieneś używać biblioteki kodującej JSON zamiast obracać własną. Spróbuj: https://code.google.com/p/jquery-json/ – limscoder

Odpowiedz

7

zamieścimy wszystkie nasze dane z JSON.

var myobj = { this: 'that' }; 
$.ajax({ 
    url: "my.php", 
    data: JSON.stringify(myobj), 
    processData: false, 
    dataType: "json", 
    success:function(a) { }, 
    error:function() {} 
}); 

następnie w php robimy

<?php 
    $json = json_decode(file_get_contents("php://input"), true); 
    // Access your $json['this'] 
    // then when you are done 
    header("Content-type: application/json"); 
    print json_encode(array(
    "passed" => "back" 
)); 
?> 

ten sposób nawet nie bałagan ze zmiennymi pocztowych iw ogóle, jej szybciej niż o przetwarzać je jQuery.

+0

W końcu to była kombinacja użycia jSONLint, jquery-json i bezpośredniego czytania ze strony php: // input, która pomogła mi rozwiązać ten problem. Największym szokiem było stwierdzenie, że mimo że dane były POSTed jako JSON, to nie pojawiły się one w $ _POST. Wybrałem tę odpowiedź tylko dlatego, że miała większość ważnych punktów, a Jeremy poświęcił czas na dostarczenie kodu, który miał pokazać, co miał na myśli. – oompahloompah

+0

Dzieje się tak, ponieważ napisany json nie jest formatem, który php ma zamiar wypełnić $ _POST. Jest bardziej podobny do wysyłania pliku, chociaż nie pojawi się w $ _FILES – Rahly

0

PHP zapełnia $_POST, parsując otrzymane dane. Jednak zna tylko dane zakodowane w formie, dane JSON nie mogą być automatycznie przetwarzane. Tak więc $_POST będzie bezużyteczny w tym przypadku. Musisz get the raw post data i przeanalizować go za pomocą json_decode.

2

Twoje pole danych powinno zawierać obiekt z parami klucz-wartość, ponieważ zostanie zakodowany jako para klucz-wartość POST.

data = {my_json: encoded_string}; 

Następnie na stronie PHP można uzyskać dostęp do danych, jak:

$data = json_decode($_POST['my_json']); 
Powiązane problemy