jQuery анализирует / отображает данные json от php json_encode

Исходный вызов .ajax в jquery:

$.ajax({ type: 'post', url: 'items_data.php', data: "id="+id, dataType: 'json', success: function(data){ if(data){ make_item_rows(data); }else{ alert("oops nothing happened :("); } } }); 

Отправляет простую строку в php-файл, который выглядит так:

 header('Content-type: application/json'); require_once('db.php'); if( isset($_POST['id'])){ $id = $_POST['id']; }else{ echo "Danger Will Robinson Danger!"; } $items_data = $pdo_db->query ("SELECT blah blah blah with $id..."); $result_array = $items_data->fetchAll(); echo json_encode($result_array); 

Я просто поймаю $ result_array и передаю его другой функции. Я дважды проверял, что есть действительно правильные значения, возвращаемые, так как я могу просто передать результат на мою страницу и отобразить что-то вроде следующего:

 [{"item_id":"230","0":"230","other_id":"700"},{"item_id":"231","0":"231","other_id":"701"},{"item_id":"232","0":"232","other_id":"702"}] 

У меня возникли проблемы с выяснением способов повторения результатов, чтобы я мог вводить значения в таблицу, которую я имею в своем HTML. Вот что я имею для своей функции:

 function make_item_rows(result_array){ var string_buffer = ""; $.each(jQuery.parseJSON(result_array), function(index, value){ string_buffer += value.item_id; //adding many more eventually $(string_buffer).appendTo('#items_container'); string_buffer = ""; //reset buffer after writing }); } 

Я также попытался поставить предупреждение в функцию $ .each, чтобы убедиться, что он стрелял 3 раза, что и было. Однако из моего кода не поступает никаких данных. Попробовали и другие методы, но не повезло.

ОБНОВЛЕНИЕ: я изменил свой код, чтобы включить parseJSON, без кубиков. Получил неожиданную ошибку токена в моем jquery-файле (сразу же, когда он пытается использовать собственный парсер json). Пробовал добавлять json-заголовок безрезультатно, такую ​​же ошибку. jQuery версия 1.9.1. Код, как сейчас, должен быть отражен выше.

Related of "jQuery анализирует / отображает данные json от php json_encode"

Установите dataType: «json» и callback в вашем вызове ajax.

Например:

 $.ajax({ url: "yourphp.php?id="+yourid, dataType: "JSON", success: function(json){ //here inside json variable you've the json returned by your PHP for(var i=0;i<json.length;i++){ $('#items_container').append(json[i].item_id) } } }) 

Также обратите внимание, что в вашем PHP задан тип содержимого JSON. header ('Content-type: application / json');

Попробуй это.

 function make_item_rows(result_array){ var string_buffer = ""; $.each(result_array, function(index, value){ value = jQuery.parseJSON(value); string_buffer += value.item_id; $(string_buffer).appendTo('#items_container'); string_buffer = ""; }); } 
 function make_item_rows(result_array){ var string_buffer = ""; var parsed_array=JSON.parse(result_array); $.each(parsed_array, function(){ string_buffer += parsed_array.item_id; $(string_buffer).appendTo('#items_container'); string_buffer = ""; }); } 

Вам нужно разобрать его с помощью jQuery.parseJSON

 function make_item_rows(result_array){ var string_buffer = ""; $.each(jQuery.parseJSON(result_array), function(index, value){ string_buffer = value.item_id; $(string_buffer).appendTo('#items_container'); }); } 

Предполагая, что вы уже проанализировали ответ json, и у вас есть массив. Я думаю, проблема в том, что вам нужно передать обратный вызов в $ .each, который принимает и индексирует, и параметр элемента

 function make_item_rows(result_array){ $.each(result_array, function(index, element){ document.getElementById("a").innerHTML+=element.item_id; }); } 

(Слегка измененный) DEMO

для начинающих в $.each вам нужно получить доступ к свойствам экземпляра объекта, содержащегося в result_array , а не result_array .

 var string_buffer = ""; $.each(result_array, function(index, object){ /* instance is "object"*/ alert( object.item_id); }); 

Не совсем уверен, чего вы ожидаете от этой строки: $(string_buffer).appendTo('#items_container');

$(string_buffer) не создает допустимого селектора jQuery, поскольку ничего в string_buffer имеет префикса для класса, тэга или идентификатора, а значения из json не

Если вы хотите просто item_id строковое значение item_id :

 $('#items_container').append( object.item_id+'<br/>'); 

Если вы получаете это с помощью методов jQuery AJAX, вам не нужно использовать $.parseJSON как предлагают другие ответы, это уже будет сделано для вас, если вы устанавливаете правильный тип данных для AJAX