2

テーブルのセルの内容を更新しようとしています。したがって、.php ファイルへの AJAX 要求を含む JavaScript があり、JavaScript を介してテーブルに挿入するコンテンツを作成します。.php ファイルの最後のコマンドはecho json_encode($result);.

JavaScript に戻ると、次のようになります。

var testarray = xmlhttp.response;
alert(testarray);

しかし、アラートからの出力は次のようになります。

{"1":{"1":"3","2":"0","3":"2","4":"0"}}{"1":{"1":"3","2":"0","3":"2","4":"0"},"2":{"1":"2","2":"1","3":"1","4":"1"}}...    

そのため、変数testarrayは配列ではなく文字列として扱われているようです。私はすでに試しvar testarray = JSON.parse(xmlhttp.response)ましたが、これはうまくいきません。どちらも機能しませんeval()

どうすればいいのかわからないので、リクエストのレスポンスがオブジェクトになります。

4

2 に答える 2

1

あなたのjsonには2つの奇妙なことがあります:

  1. この部分は json では有効ではありません: ...}{... 2 つのオブジェクトはコンマで区切る必要があります

  2. 表記は、文字列インデックスを持つオブジェクトであり、int インデックスを持つ配列ではありません。[[1,2,3,4],[5,6,7,8]] のようになります。

ポイント1については、多くのjsonを連結するループがあるようです

ポイント2.オブジェクト表記は配列として使えるので問題ない

いくつかのコード:

    //the folowing code doesn't work: }{ is not parsable
var a=JSON.parse('{"1":{"1":"3","2":"0","3":"2","4":"0"}}{"1":{"1":"3","2":"0","3":"2","4":"0"},"2":{"1":"2","2":"1","3":"1","4":"1"}}');

    //the folowing code work and the object can be used as an array
var a=JSON.parse('{"1":{"1":"3","2":"0","3":"2","4":"0"},"2":{"1":"2","2":"1","3":"1","4":"1"}}');
alert(JSON.stringify(a[1]));


    //the folowing code displays the real notation of a javascript array:
alert(JSON.stringify([1,2,3,4]));
于 2013-08-27T09:31:25.077 に答える
0

ここでの問題は、配列にインデックス 0 がないことだと思います。

たとえば、これをサーバーから出力すると、次のオブジェクトが生成されます。

$result = [];
for ($i = 1; $i < 5; $i++) $result[$i] = $i;
echo json_encode($result);      // outputs an object

これをサーバーから出力すると、配列が生成されます。

$result = [];
for ($i = 0; $i < 5; $i++) $result[$i] = $i;
echo json_encode($result);     // produces an array

とにかく、サーバーが配列をオブジェクトとして出力する場合でも、javascript で通常どおりアクセスできるはずです。

var resp = xmlhttp.responseText,  // "responseText" - if you're using native js XHR
    arr = JSON.parse(resp);       // should give you an object
console.log(arr[1]);              // should give you the first element of that object
于 2013-08-27T09:09:37.733 に答える