【问题标题】:jQuery: $.getJSON sorting the data on Chrome / IE?jQuery:$.getJSON 对 Chrome/IE 上的数据进行排序?
【发布时间】:2012-03-11 20:33:57
【问题描述】:

我正在使用 Ajax 传递一个关联数组 (id => val),并使用 jQuery 的 $.getJSON 接收它,它可以正确读取数据并准备对象。但是,有一个非常烦人的排序问题。

似乎在 Chrome 和 IE 上,数据按关联数组的 id 部分排序。所以如果数组应该是 (5=> 'xxx', 3 => 'fff') 它实际上变成了 (3 => 'fff',5=> 'xxx')。在 FireFox 上,它按预期工作,即未排序。

有什么想法吗?

【问题讨论】:

标签: javascript jquery ajax sorting getjson


【解决方案1】:

您可以为所有整数索引添加前导 0。

var json = { '05' => 'xxx', '03' => 'fff' };

【讨论】:

    【解决方案2】:

    似乎最好的方法是完全避免关联数组。当您想发送关联数组时,只需将其作为两个单独的数组发送 - 一个键和一个值。这是执行此操作的 PHP 代码:

        $arWrapper = array();
        $arWrapper['k'] = array_keys($arChoices);
        $arWrapper['v'] = array_values($arChoices);
        $json = json_encode($arWrapper);
    

    以及简单的 JavaScript 代码来做任何你想做的事情

                for (i=0; i < data['k'].length; i++) {
                    console.log('key:' + data['k'][i] + ' val:' + data['v'][i]);
                }
    

    【讨论】:

      【解决方案3】:

      另一种选择是将数据作为对象数组返回。这将确保对象保持在您返回它们的顺序。

      编辑:

      基本上,对于每个 key > value 对,将其推送到一个新数组并 json_encode 该数组。

      【讨论】:

      • 它目前使用 PHP 编码,使用:json_encode($arChoices, JSON_FORCE_OBJECT) - 那你有什么建议?
      • 尝试将数组包装在另一个数组中仍然无法完成工作。在 Chrome 上,这些显示为对象,但它们的内容仍然是排序的。
      • 我没有做太多的php,但我会尝试删除可选的选项参数。 json_encode($arChoices)
      • 不会有什么不同,因为这是关联数组php.net/manual/en/function.json-encode.php的默认值
      • 我不确定语法是什么,但您需要将其转换为实际数组,索引为 0-n,其中数组中的每个值都是包含 id 和值的关联数组。这样看。在 JavaScript 中,关联数组表示为对象,对象键/值没有顺序。因此,您需要将其作为包含关联数组的数组返回。
      猜你喜欢
      • 2012-09-16
      • 2014-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多