4

基本上我想要做的是返回一个 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 对象数组一样遍历结果变量。results 变量是一个字符串,由 php 文件的所有输出组成。所以让我的问题而不是,我怎样才能改变它,使函数得到一个数组,或者我如何把它变成一个数组?

我的 php 文件当前返回如下内容:

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

5 回答 5

11

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);
}

一个帮助你理解的Demo

于 2013-09-26T19:38:36.733 回答
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 对象。

于 2013-09-26T19:32:57.470 回答
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() 和 jqXHR.complete() 回调自 jQuery 1.8 起已弃用。要为最终删除准备代码,请改用 jqXHR.done()、jqXHR.fail() 和 jqXHR.always()。

于 2013-09-26T19:34:16.827 回答
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);
});
于 2013-09-26T19:39:16.210 回答
-1

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

于 2014-11-26T12:33:17.740 回答