Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Jquery返回未排序的数组_Javascript_Jquery - Fatal编程技术网

Javascript Jquery返回未排序的数组

Javascript Jquery返回未排序的数组,javascript,jquery,Javascript,Jquery,这是一个非常奇怪的问题 我调用一个服务器端方法来返回一个按字母顺序排序的数组 当我直接到达终点时,顺序与预期一致。但是,当Jquery调用该方法时,它将以随机顺序返回 我怀疑问题与jquery函数有关: function updateSuburbs(suburb_selected,town_id) { var $suburbs = $("#mds_suburbs"); $suburbs.empty(); $suburbs.append($("<option>&

这是一个非常奇怪的问题

我调用一个服务器端方法来返回一个按字母顺序排序的数组

当我直接到达终点时,顺序与预期一致。但是,当Jquery调用该方法时,它将以随机顺序返回

我怀疑问题与jquery函数有关:

function updateSuburbs(suburb_selected,town_id)
{
    var $suburbs = $("#mds_suburbs");
    $suburbs.empty();
    $suburbs.append($("<option></option>").attr("value", "").text('Loading...'));
    url = '/api/rpc/delivery/engine/suburbs/town_id/' + town_id;
    $.ajax({
        type:  'GET',
        async: true,
        url:   url,
        dataType: "json",

        success: function(responseObject){

            $suburbs.empty();
            $suburbs.append($("<option></option>").attr("value", "").text('Select your suburb'));
            if (responseObject.status) {
                if (responseObject.suburbs) {
                    $.each(responseObject.suburbs, function(value,key) {
                        $suburbs.append($("<option></option>").attr("value", value).text(key));
                    });
                    if (suburb_selected !== null && suburb_selected !== '')
                    {
                        $('#mds_suburbs').val(suburb_selected);
                    }
                } else {
                    $suburbs.append($("<option></option>")
                        .attr("value", 0).text('No suburbs for this town...'));
                }
            } else {
                $suburbs.empty();
                $suburbs.append($("<option></option>").attr("value", "").text('Error locations suburb'));
            }
        }
    });
}
函数更新郊区(选定郊区,城镇id)
{
var$郊区=$(“mds#U郊区”);
$s.empty();
$s.append($(“”).attr(“值”,“值”).text('Loading…');
url='/api/rpc/delivery/engine/郊区/town_id/'+town_id;
$.ajax({
键入:“GET”,
async:true,
url:url,
数据类型:“json”,
成功:功能(responseObject){
$s.empty();
$郊区.append($(“”).attr(“值”,“选择您的郊区”).text($(“”));
if(响应对象状态){
if(响应对象郊区){
$.each(响应对象、函数(值、键){
$s.append($(“”).attr(“value”,value).text(key));
});
如果(选择郊区!==null和选择郊区!==“”)
{
$('mds#u郊区').val(选定郊区);
}
}否则{
$subgroups.append($(“”)
.attr(“value”,0).text('本镇无郊区…');
}
}否则{
$s.empty();
$SUPPORE.append($(“”).attr(“值”,“错误位置”).text($(“”));
}
}
});
}
艾德:

进一步的阅读和研究表明,实际上是Chrome自动对对象数组进行排序…:

服务器端输出:

客户端输出:


在PHP中将此数据结构表示为数组可能会产生误导。但需要注意的是,即使在PHP中,它们也不是数字索引从0开始的索引数组,而是关联数组

它们在JSON中转换为非数组对象,在JavaScript中也是如此。非数组对象的属性在JavaScript中没有预定义的顺序,因此它们可能以不可预测的顺序出现,这可能取决于浏览器

有关更多信息,请参阅

解决方案 在PHP中,可以将关联数组转换为索引数组:

而不是:

$suburbs = Array(
    "5190" => "CBD",
    "5823" => "Cloetsville",
    "5984" => "De Zalze"
)
获取此结构:

$suburbs = Array(
    0 => Array("code" => "5190", "name" => "CBD"),
    1 => Array("code" => "5823", "name" => "Cloetsville"),
    2 => Array("code" => "5984", "name" => "De Zalze")
)
您可以使用以下PHP代码进行此转换:

foreach($suburbs as $key => $value) {
    $result[] = ["code" => $key, "name" => $value];
}
$suburbs = $result;
。。。然后继续像前面一样使用
JSON\u encode
将其输出为JSON

在JavaScript中,您必须更改
$。每个
回调如下所示:

$.each(responseObject.suburbs, function(i, value) {
    $suburbs.append($("<option></option>")
            .attr("value", value.code).text(value.name));
});
$。每个(响应对象、函数(i、值){
$subgroups.append($(“”)
.attr(“value”,value.code).text(value.name));
});

您能否提供该对象的样本?我怀疑它不是一个数组,而是一个对象,原因是对象属性没有预定义的顺序。我添加了一些服务器端输出和客户端输出的屏幕截图……它证实了我所说的:这些不是JSON的数组,即使在PHP中它们被称为关联数组。它们是JSON和JavaScript中的非数组对象。OK,什么是排序的最好方法?你有没有控制PHP代码,如果是的话,你能考虑改变那里的数据结构吗?或者这不是一种选择?注意:如果你能包含数据结构的文本版本,而不是图像,那会更有用。谢谢你的解决方案!