Как я могу вернуть объект array / json, содержащий объекты json, через вызов ajax php?

В основном то, что я пытаюсь сделать, это вернуть результаты запроса mysql. Я знаю, как поместить каждую строку результатов запроса в свой собственный объект JSON, теперь я просто борюсь с тем, чтобы, если есть несколько строк результатов, чтобы вернуть их в мой jquery. В моем jquery я вызываю функцию $ .ajax (), и у меня нет никаких проблем с этим. Моя проблема заключается в части успеха, где я хочу иметь возможность сделать что-то вроде следующего:

$.ajax ({ type: "POST", url:"select.php", data: {columns : "*", table : "tbUsers", conditions : "" }, success: function(results) { foreach (results as obj) { JSON.parse(obj); $("#page").html(obj.id + " " + obj.name); } } }); 

Я хочу, чтобы иметь возможность перебирать переменную результата, как массив объектов JSON. Переменная результатов – это строка, которая состоит из всего вывода файла php. Так что пусть мой вопрос скорее будет, как я могу изменить его так, чтобы функция получала массив или как мне его изменить?

Мой php-файл в настоящее время возвращает что-то вроде этого:

 [{"0":1, "1":"name1", "id":1, "name":"name1"} , {"0":2, "1":"name2", "id":2, "name":"name2"}] 

С php вы можете использовать

 echo json_encode($result); // result may contain multiple rows 

В своем success вызове вы можете использовать

 success: function(results) { var htmlStr = ''; $.each(results, function(k, v){ htmlStr += v.id + ' ' + v.name + '<br />'; }); $("#page").html(htmlStr); } 

Демо, чтобы помочь вам понять .

Попробуйте что-нибудь вроде:

 $.ajax ({ type: "POST", url:"select.php", data: {columns : "*", table : "tbUsers", conditions : "" }, dataType: "json", success: function(results) { for( var i in results) { $("#page").html(results[i].id + " " + results[i].name); } } }); 

Обратите внимание на dataType: «json» – это проанализирует все это в объекты JSON для вас.

цитата из вашего вопроса

Я знаю, как помещать каждую строку результатов запроса в свой собственный объект JSON

вам нужно отправить одну большую строку json вместо нескольких меньших. Вы не сможете запрограммировать ответ, потому что это не одна строка json (это несколько строк json).

также лучше связать обратные вызовы ajax, потому что их использование в качестве параметров будет удалено из jquery в будущем.

 $.ajax({ url: ' your/url ', type: 'POST', dataType: 'json', data: {param1: 'value1'}, }) .done(function() { console.log("success"); }) .fail(function() { console.log("error"); }) .always(function() { console.log("complete"); }); 

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

Уведомление об изнашивании: обратные вызовы jqXHR.success (), jqXHR.error () и jqXHR.complete () устаревают с jQuery 1.8. Чтобы подготовить код для их возможного удаления, вместо этого используйте jqXHR.done (), jqXHR.fail () и jqXHR.always ().

Вы можете просто вернуть один большой результат JSON. Потому что каждый из ваших объектов JSON можно обернуть в другой.

Возвращаемый JSON будет представлять собой массив объектов (что бы они ни были)

 { "objects": [(first object), (second object), ... ] } 

Затем в вашей функции успеха вы можете перебирать каждый объект и обновлять страницу:

 var obj = JSON.parse(results); jQuery.each(objs, function(i, obj) { $("#page").html(obj.id + " " + obj.name); }); 

return Благодаря завершенному успеху. Затем в вашей функции успеха вы можете выполнять итерацию по каждому объекту и обновлять страницу. Вы можете просто вернуть один большой результат JSON. Поскольку каждый из ваших объектов JSON можно обернуть в другой. Возвращаемый JSON будет представлять собой массив объектов (что бы они ни были)