2013-09-20 3 views
1

Я получаю от этого Ajax вызовавозвращение JSON из PHP и обрабатывать

{"id":"381120774951940096","time":"Posted 0 minutes and 51 seconds ago.",.... 

Как я могу добавить каждый из них в переменный, идентификатор, время и т.д.? data.id не будет работать, он говорит undef.

<script> 
$(function() { 
     $.ajax({ 
      type: "POST", 
      url: "start.php", 
      cache: false, 
      success: function(data) { 
       console.log(data.name); 
       console.log(data); 
      } 
     }) 
    }); 
</script> 

Это то, что я вернусь из start.php

$return = array('id' => $info['id_str'] ,'time' => timeDiff(new DateTime($info['created_at'])), 'name' => $info['user']['name'], 'text' => $info['text'], 'image' => $picture, 'url' => "http://twitter.com/{$info['user']['screen_name']}"); 

print_r(json_encode($return)); 

EDIT я, что print_r внутри цикла Еогеасп и это был вопрос. Поэтому я добавил еще один массив и использовал echo json_decode ($ array, true) в конце файла. Написание этого на всякий случай может помочь кому-то.

Приветствия

+1

почему print_r? эхо отлично! – MightyPork

+0

Я просто привык к print_r. – DroneBone

ответ

-1

Вам нужно разобрать строку JSON в объект. Вы можете использовать JSON.parse.

// Your JSON string 
var json_str = "{'id': 'foo', 'time': 'bar'}"; 

// We need to parse it, converting it into a JS object 
var json_obj = JSON.parse(json_str); 

// We can now interact with it 
console.log(json_obj.id); 
console.log(json_obj.time); 

В качестве альтернативы, вы можете разобрать JSON, используя встроенную функцию JQuery parseJSON().

jQuery также имеет встроенную функцию для извлечения JSON под названием getJSON(). Если используется память, это всего лишь сокращение для выполнения вызова .ajax() и указание типа данных json. Это будет обрабатывать вышеупомянутое (разбор JSON) для вас и является рекомендуемым решением.

+0

jQuery делает это для вас, просто определите параметр 'dataType'. Вы решаете ситуацию, которая не должна была произойти в первую очередь - такой подход ошибочен. – MightyPork

+0

Кроме того, 'var json_str = {" ... 'is ** NOT ** a string. – MightyPork

+0

Я очень четко указал, что dataType должен быть установлен в нижней части моего сообщения. Основная причина указана и адресована на наверху, как вопрос полноты (т. е. это ПОЧЕМУ оно сломалось). Я дам вам последний пункт и соответствующим образом обновился. – Julio

0

Во-первых, в вашем PHP, измените строку:

echo json_encode($return, true); 

Это второй параметр гарантирует, что JSON является интерпретируемым как ассоциативный массив. Кроме того, вы должны использовать echo вместо print_r при возврате JSON; print_r может изменить форматирование.

Далее используйте следующий AJAX вызов:

$.ajax({ 
    type: "POST", 
    url: "start.php", 
    dataType: "json", // Add this option. 
    cache: false, 
    success: function(data) { 
     console.log(data.name); 
     console.log(data); 
    } 
}) 

Опция dataType: "json" гарантирует, что data будет анализироваться как объект JSON, как только он получен. Таким образом, data.id должен быть немедленно доступен в вашей функции обратного вызова success.

Надеюсь, это поможет!

+0

Я не получаю ничего в консольном журнале, когда добавляю dataType: «json» в вызове ajax. Я попытался установить заголовки json в файл php и тот же результат. – DroneBone

+0

Вы также решили переключиться на 'echo' вместо' print_r'? – theftprevention

+0

, он также позволяет поместить 'ob_end_clean();' перед эхом и ' exit, 'after. – MightyPork

0

Во-первых, вы должны использовать echo в сценарии сервера. print_r в основном предназначен для отладки массивов.

Во-вторых, вы должны объявить dataType вариант для Ajax вызова:

$.ajax({ 
    dataType: "json", // <-- here 
    type: "POST", 
    url: "start.php", 
    cache: false, 

    success: function(data) { 
     console.log(data.name); 
     console.log(data); 
    } 
}); 

, как вы есть сейчас, я думаю, вы получаете строку ответа в виде данных.

Вы можете проверить, что с console.log(JSON.stringify(data));

0

Вы должны установить dataType: 'json' в вашем AJAX. Это означает, что jQuery будет анализировать результат как JSON для вас.

Затем разобрать данные,

data = $.parseJSON(data); 

Тогда читайте var id = data.id;

Кроме того, в вашем PHP, нет необходимости использовать print_r(). Просто используйте эхо вместо print_r(). Like:

echo json_encode($return); 
Смежные вопросы