2013-03-14 5 views
0

Я пытаюсь настроить простой вызов AJAX, который отправляет его данные через JSON на мой PHP-скрипт, который затем возвращает данные.Как отправлять и получать с помощью AJAX и JSON

Но мне не повезло.

Вот мой код для отправки:

$.ajax({ 
     url: ROOT+'Address/fetchAddress', 
     type: 'POST', 
     async: false, 
     dataType: 'json', 
     data: { 
     json: { 
      "Id":"0", 
      "Name":"Jim" 
     } 
     }, 
     error: function(a, b) 
     { 
     alert(b) 
     }, 
     success: function(data) 
     { 
     data = $.parseJSON(data); 
     alert(data) 
     } 
    }) 

Serverside:

public function fetchAddress() 
    { 
    $JSON = $_POST['json']; 
    echo json_decode($JSON); 
    } 

Но я получаю "parseerror" в окне предупреждения и если я проверить ответ я получаю:

Warning: json_decode() expects parameter 1 to be string, array given in ...public_html\controllers\Address.php on line 20 
+2

у вас есть два это предъявляет иск, как к типам данных. Ваш серверный код ожидает, что параметр 'json' POST будет строкой, и это не так. Ваш jQuery AJAX-вызов ожидает, что ответ сервера будет действительным JSON, и это не так. –

ответ

3

Здесь есть концептуальная ошибка.

Когда вы скажете: dataType: 'json' это означает, что данные в формате JSON.

Вы по-прежнему отправки данных в массиве POST

public function fetchAddress(){ 
    echo $_POST['json']; 
} 

для выборки данных

Чтобы забрать с другой стороны у вас есть заранее обходили объект (как данные возвращаются в формате JSON)

Так

success: function(data) 
    { 

    alert(data.id+"NAME"+data.name); 
    } 

(Ох, и ваши данные не строка (что ар ОСТ ожидает) и JSON настолько чист его в хорошую строку

json: '{"Id":"0","Name":"Jim"}' 
+0

Спасибо, установив его как строку, отсортированную по ней. Я понимаю это сейчас! – imperium2335

1

Данные, полученные вашим PHP, не требуют декодирования, так как это уже массив. Просто измените функцию на это, и вы должны быть хорошо

public function fetchAddress() 
{ 
    echo json_encode($_POST['json']); 
} 

Кроме того, так как вы сказали Jquery, что ваш ответ является JSON, нет необходимости вызывать $ .parseJSON() для ваших принесенных данных

+0

Закрыть, но он не будет работать, поскольку его опубликованные данные не являются строкой – cjds

+0

Ускорение - это плохой консультант ... Исправлено: – Loupax

1

ajax вызов передает данные в виде массива и ожидает возвращаемые данные в виде JSON, поэтому функция PHP должна выглядеть

public function fetchAddress() 
{ 
    $data = $_POST['json']; 
    echo json_encode($data); 
} 

и на стороне клиента не требуется декодировать полученные данные, поскольку в ней dataType: 'json', а затем это уже сделано с помощью функции ajax

$.ajax({ 
     url: ROOT+'Address/fetchAddress', 
     type: 'POST', 
     async: false, 
     dataType: 'json', 
     ... 
     success: function(data) 
     { 
     alert(data) 
     } 
    });