Как разобрать данные, полученные из функции $ .get () - PullRequest
1 голос
/ 31 января 2011

Я получил данные с сервера, используя ajax, вот так: (EDITED)

$(document).ready(function()
{
  setInterval(function()
  {
     $.get('/forms/requestProcessor.php', function(data) 
     {
        $("#shout").append(data.question+'<br>');
        alert('Load was performed.');
     },'JSON');
  }, 5000); // 5 seconds
});

В php-файле я отправляю такие данные:

while($row=mysql_fetch_array($result))
{
  $question=$row['Question'];
  $choice1=$row['Choice1']; 
  $choice2=$row['Choice2'];
  $choice3=$row['Choice3'];
  $choice4=$row['Choice4'];

  $return_data->question = $question;
  $return_data->choice1 = $choice1;
  $return_data->choice2 = $choice2;
  $return_data->choice3 = $choice3;
  $return_data->choice4 = $choice4;

  echo(json_encode($return_data));
}

Он печатает "неопределенный". Однако, если я укажу браузеру непосредственно на файл php, он правильно отобразит данные в формате json

Ответы [ 6 ]

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

Да, возможно, самый простой способ - вернуть json_encoded string.поэтому ваш код будет выглядеть так: php:

    header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");

    header("Last-Modified: " . gmdate("D, d M Y H:i:s") . "GMT");

    header("Cache-Control: no-cache, must-revalidate");

    header("Pragma: no-cache");

    header("Content-type: text/x-json");

    echo json_encode($array);

    exit(0);

и JavaScript будет выглядеть так:

 $.get('/forms/requestProcessor.php', function(data) 
 {
  ....
 }, 'json');
1 голос
/ 31 января 2011

Лучше, если вы закодируете возвращаемые значения «/forms/requestProcessor.php» в формат JSON. Затем прочитайте его с клиента с помощью jquery.parseJSON ()

http://api.jquery.com/jQuery.parseJSON/

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

Конечно.Было бы проще, если бы вы поместили их, скажем, в <p></p> пары, но то, что вы делаете с данными, это помещает их в DOM-узлы.jQuery более чем счастлив позволить вам получить результаты из этих узлов DOM снова.

Но вы могли бы упростить себе жизнь, если бы PHP вернул JSON как

[ question, ans1, ans2, ans3, ans4]

или даже лучше как

{ "question" : "my question text",
  "answers"  : [a1,a2,a3,a4]
}
1 голос
/ 31 января 2011

похоже, что вы получаете результирующую строку, в которой нет реальной структуры.

если вы хотите, вы можете использовать json_encode() в своем кодировке любые данные, которые вы хотите отправить обратно в форме json, и изменить настройку вашего $.get() запроса на ожидание json, так что вы можете просто получить к ним доступ через data.choice2 и т.д ...

пример

$return_data->question = $question;
$return_data->choice1 = $choice1;
$return_data->choice2 = $choice2;
...
$return_data->choice5 = $choice5;

echo json_encode($return_data);

, а затем для вашего $.get()

$(document).ready(function()
{
  setInterval(function()
  {
     $.get('/forms/requestProcessor.php', function(data) 
     {
        $("#shout").append(data+'<br>');
        alert('Load was performed.');
     },'json');                //<-- added, last argument to expect 'json'
  }, 5000); // 5 seconds
});

теперь данные будут возвращены в формате json и будут проанализированы jQuery, поскольку он ожидает, что это будет json.

Таким образом, теперь вы можете получить доступ к данным в своей функции успеха с помощью таких операторов, как data.question, data.choice1 и т. Д. *

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

U должен использовать jQuery.parseJSON для этого ..

пример:

"var obj = jQuery.parseJSON('{"name":"John"}');
alert( obj.name === "John" );"

нажмите меня, чтобы узнать кратко

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

В php вы можете сохранить ответ в массиве и преобразовать его, используя функцию json_encode.Ранее в jQuery вы можете получить json, используя $ .parseJSON (data)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...