下面是我的PHP文件。
$test = array('4'=>'test','5'=>'test','1'=>'test','2'=>'test');
return array(
"status" => "test
"data" => $test
);
我正在将该数组发送到AJAX:
$.ajax({
url: url,
type: "POST",
data: {},
success: function(result) {
if (result.status == 'test') {
console.log(result.data);
}
}
});
我得到以下输出:
{1: "test", 2: "test", 4: "test", 5: "test"}
它获取数据的顺序与我从PHP发送的顺序不同。我想以与发送PHP相同的顺序来获取它。任何帮助表示赞赏。预先感谢。
答案 0 :(得分:0)
数组中的键指示顺序。
如果您要特定的订单,则应先定购,然后再发送到前端。
我不相信您可以将数据发送到前端,而无需将其按放入对象的顺序进行排序。
为进一步帮助您进行测试,您还可以考虑在数组中指定不同的值。
这样,您将能够区分存储在数组中的不同值。
答案 1 :(得分:0)
如评论中所述,如果项的顺序很重要,则需要使用数组,因为在JS中不能保证对象的属性顺序。
在PHP方面,将关联数组转换为数组:
$test = array('4'=>'test','5'=>'test','1'=>'test','2'=>'test');
$testArray = array_map(function($key) use($test) { return [$key, $test[$key]]; }, array_keys($test));
return array(
"status" => "test
"data" => $testArray
);
在JS端,将其转换回对象:
$.ajax({
url: url,
type: "POST",
data: {},
success: function(result) {
if (result.status == 'test') {
const data = result.data.reduce((result, entry) => ({...result, ...{[entry[0]]: entry[1]}}), {});
console.log(data);
}
}
});
注意:这使用ECMAScript 2018语法。如果有问题,则有other ways to merge objects。