Javascript Jquery返回未排序的数组
这是一个非常奇怪的问题 我调用一个服务器端方法来返回一个按字母顺序排序的数组 当我直接到达终点时,顺序与预期一致。但是,当Jquery调用该方法时,它将以随机顺序返回 我怀疑问题与jquery函数有关:Javascript Jquery返回未排序的数组,javascript,jquery,Javascript,Jquery,这是一个非常奇怪的问题 我调用一个服务器端方法来返回一个按字母顺序排序的数组 当我直接到达终点时,顺序与预期一致。但是,当Jquery调用该方法时,它将以随机顺序返回 我怀疑问题与jquery函数有关: function updateSuburbs(suburb_selected,town_id) { var $suburbs = $("#mds_suburbs"); $suburbs.empty(); $suburbs.append($("<option>&
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代码,如果是的话,你能考虑改变那里的数据结构吗?或者这不是一种选择?注意:如果你能包含数据结构的文本版本,而不是图像,那会更有用。谢谢你的解决方案!