Исходный вызов .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. Код, как сейчас, должен быть отражен выше.
Установите 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