【问题标题】:What is wrong with this Jquery Ajax request in Chrome?Chrome 中的这个 Jquery Ajax 请求有什么问题?
【发布时间】:2015-12-11 05:37:39
【问题描述】:

我正在使用以下代码向 PHP 脚本发出请求:

$.ajax({
            method: "POST",
            url: "myAPI.php",
            data: {
                   orderById: 2,
                   action: 'returnStuff',
                   },
            success: function(data){
                $.each(data.data, function(key, value) {
                    var $targetToMove = $('.shape.'+value.attr_name);
                    //if element already exists on page, move it to the end of the container
                    if($('.'+value.xml_name).length){
                            $('.container').append($targetToMove);
                    }
                });
            }
    });

这是我返回数据的简化示例

{"data":{"0":{"id":"1","name":"This","color":"blue"},
         "1":{"id":"2","name":"That","color":"red"},
         "2":{"id":"3","name":"whatever","color":"blue"}}}

如果 orderById 等于 1,则数据按 id 从低到高按数字返回。如果它等于 2,则从最高到最低以数字形式返回,如下所示:

{"data":{"0":{"id":"3","name":"whatever","color":"blue"},
         "1":{"id":"2","name":"That","color":"red"},
         "2":{"id":"1","name":"This","color":"blue"}}}

这个想法是API按照我想要的顺序返回数据,然后在ajax调用成功时,元素按照返回的数据对象的顺序重新排列在页面上。

这符合我在 Firefox 中的意图,但在 Chrome 中,每当我在控制台中记录成功的数据时,顺序总是相同的,尽管控制台指示我的 API 的响应顺序正确。

我错过了什么?我不知道这是缓存问题还是我只是忽略了我的 javascript 中的某些内容。

【问题讨论】:

    标签: javascript php jquery ajax google-chrome


    【解决方案1】:

    Object 属性顺序在 JavaScript 中无法保证。您宁愿为此使用Array

    【讨论】:

      【解决方案2】:

      将您的 json 格式化为如下所示:

      {"data":[{"id":"3","name":"whatever","color":"blue"},{"id":"2","name":"That","color":"red"},{"id":"1","name":"This","color":"blue"}]}
      

      【讨论】:

      • 这是我可以在 PHP 的 json_encode 中选择的选项,还是应该手动创建 json?
      • 您的 json 编码应如下所示:json_encode(array("data"=>$array)) 其中 $array 是所需顺序的项目数组
      • 我的 json 现在按照指示进行了格式化,但顺序似乎仍然无关紧要。当我做 typeof(data.data[0]) JS 仍然说一个对象时,Chrome 仍然不尊重 json 返回的顺序。一定还缺少什么。
      • 最终的解决方案是大大简化我的 php 返回到一个简单的 JS 数组,该数组按照我希望它们出现的顺序保存类值。 php 返回的大型关联数组(对象)需要比必要的更多工作。
      • data.data 现在是一个对象数组,按照来自 php 文件的顺序排列
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-21
      • 1970-01-01
      相关资源
      最近更新 更多