如何通过ajax php调用返回包含json对象的数组/ json对象?

时间:2013-09-26 19:28:17

标签: php jquery mysql ajax json

基本上我要做的是返回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"}]

5 个答案:

答案 0 :(得分:10)

从你可以使用的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);
}

A Demo to help you understand.

答案 1 :(得分:3)

尝试类似:

$.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对象。

答案 2 :(得分:0)

引用你的问题

  

我知道如何将查询结果的每一行放入自己的 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()和   从jQuery 1.8开始,不推荐使用jqXHR.complete()回调函数。准备   你的代码最终删除,使用jqXHR.done(),jqXHR.fail(),   和jqXHR.always()相反。

答案 3 :(得分:0)

您只需返回一个大的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);
});

答案 4 :(得分:-1)

返回因为包装成功然后在您的成功函数中,您可以遍历每个对象并更新页面您只需返回一个大的JSON结果。因为每个JSON对象都可以包装在另一个中。您返回的JSON将是一个对象数组(无论它们是什么)