1

AJAX ハンドラー コード (PHP) から、このような json_encode を使用してバナーの配列を返しています。

echo json_encode(array("bannersData" =>$bannersData));

ここまでエコーするとデータの順番が正しい。

ただし、AJAX 応答処理コード (javascript 部分) では、返されたオブジェクトの別の並べ替え (バナー ID で並べ替えられているようです) を chrome バージョン 26.0.1410.64 m で取得します。元の並べ替え順序をそのまま維持するオプションがあるかどうかはわかりません。

ここにコードがあります -

$.ajax({
type: "POST",
async: false,
url: posturl,
data:postdata,
dataType: "json",
success: function(msg){

    if($.isEmptyObject(msg.bannersData))
    {
        bannerOptionsHtml = "No Banner available";  
    }
    else
    {
        /*getting unexpectedly sorted result here*/

    }

});

例データ-

入力

私がするときecho json_encode()、以下はデータの元の順序です -

'fggd'             [12658]
banner 2           [12653]
Copy 2 of banner 1 [12655]
Copy 3 of banner 1 [12656]
Copy 4 of banner 1 [12657]
sdfds = 'xyz'      [12654]

出力

しかし、以下はAJAX応答で得られるものです-

クロム(バナーIDに基づいてソートが行われているようです-下のRHS列はバナーIDです)

Test                [12652]
banner 2            [12653]
sdfds = 'xyz'       [12654]
Copy 2 of banner 1  [12655]
Copy 3 of banner 1  [12656]
Copy 4 of banner 1  [12657]
'fggd'              [12658]

Firefoxで(予想どおり)

'fggd'             [12658]
banner 2           [12653]
Copy 2 of banner 1 [12655]
Copy 3 of banner 1 [12656]
Copy 4 of banner 1 [12657]
sdfds = 'xyz'      [12654]
4

2 に答える 2

0

PHP 配列で数値キーを文字列に変換しようとしましたか? Chromeはintキー配列をソートしているようです(オペラと同じ問題)

于 2013-04-19T10:24:50.750 に答える
0

実際に持っているJSONオブジェクトのフォーマットを教えていただけますか? bannersDataが実際にはオブジェクトとしてではなく配列として転送されていることに1 を賭けます。

JSON 文字列からオブジェクトを再作成するためにブラウザーが従う標準があり、この標準は、キーと値の順序をそのまま維持するようにブラウザーに命令します。ただし、これはarraysには当てはまりません。また、それらにはまったく標準がありません。したがって、ブラウザはこれについて異なっています。

これは不明瞭な事実ではありません: Chrome と Opera が JSON オブジェクトを Index ASC でソートするのを止めるにはどうすればよいでしょうか? あなたの質問の複製です(おそらくそのように投票します)。

2 つの解決策: 配列を PHP からキーと値のペア (キーが数値であっても!) を持つオブジェクトに変換して順序を維持するか、すべてのブラウザーで順序が維持されるわけではないことを理解します。for (var i = 0; i < array.length; i++) {最初のオプションでは、オブジェクト自体ではなくオブジェクトのキーを反復処理する必要があるfor 整数反復ループ ( を使用している場合を除き、JS コードを変更する必要はありません。

于 2013-04-19T10:27:02.653 に答える