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

理解に役立つデモ

于 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 結果を 1 つだけ返すことができます。各 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 に答える
0

あなたの質問から引用

クエリ結果の各行を独自のJSON オブジェクトに入れる方法を知っています

複数の小さいものではなく、1 つの大きな 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 に答える
-1

return ラップされた success その後、成功関数では、各オブジェクトを反復処理してページを更新できます。大きな JSON 結果を 1 つだけ返すことができます。各 JSON オブジェクトを別のオブジェクトにラップできるためです。返される JSON は、オブジェクトの配列になります (それらが何であれ)。

于 2014-11-26T12:33:17.740 に答える