echo'd PHP кодировать JSON, вызванный через AJAX, что возвращает? - PullRequest
5 голосов
/ 31 января 2011

Я думаю, что что-то здесь упущено:

Используя AjAX, я получаю некоторые данные из базы данных и отправляю их обратно в формате JSON. $ jsondata = array ();

while ($Row = mysql_fetch_array($params))
{

    $jsondata[]= array('cat_id'=>$Row["cat_id"], 
                          'category'=>$Row["category"], 
                     'category_desc'=>$Row["category_desc"],
                     'cat_bgd_col'=>$Row["cat_bgd_col"]);
};

echo("{\"Categories\": ".json_encode($jsondata)."};");

Пока проблем нет.

На стороне чистоты я получаю обратно в

ajaxRequest.responseText

и если я сделаю это

var categoriesObject = ajaxRequest.responseText; 
alert(categoriesObject);

Я вижу то, что ожидаю увидеть, т.е. весь массив в предупреждении.

Там, где все идет не так, пытается получить доступ к ответу. Ошибка, которую я получаю, состоит в том, что "categoryObject" не является объектом - если не то, что это? что меня беспокоит, так это то, что я даже не могу получить к нему доступ:

document.write(categoriesObject.Categories[0].category);

так что я делаю не так?

Ответы [ 2 ]

11 голосов
/ 31 января 2011
  1. Не следует создавать JSON вручную. Использование:

    echo json_encode(array('Categories' => $jsondata));
    

    или просто

    echo json_encode($jsondata);
    

    Не вижу смысла добавлять Categories.

  2. Вы должны декодировать JSON на стороне клиента, используя JSON.parse (доступно в большинстве браузеров, но также доступно как script ):

    var data = JSON.parse(ajaxRequest.responseText);
    
  3. Если вы хотите быть очень правильным, добавьте

    header('Content-type: application/json');
    

    в ваш PHP-скрипт.

2 голосов
/ 31 января 2011

Вы действительно анализируете JSON? Это не будет работать без.

var categoriesObject = JSON.parse(ajaxRequest.responseText);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...