【发布时间】:2018-02-19 05:25:28
【问题描述】:
我的 ajax 调用返回一个 有时 可排序的 javascript 对象。有时是因为它有时确实有效,有时则无效。我不知道为什么。当它不起作用时,我会得到这个。
未捕获的类型错误:cars.sort 不是函数
我已将返回数据类型指定为始终为 json。 console.log(typeof cars) 总是返回object,无论排序是否有效。
由于这是在成功声明中,因此可以安全地假设每次都加载汽车,因此这不是异步问题。我读了这个answer 并决定尝试[].sort.call(cars).sort(sort_timestamp) 但它不起作用。我真的迷失了为什么cars.sort 有时而不是总是有效。 sort_timestamp 是一个按汽车对象的时间戳字段排序的函数。
$.ajax({
url: url,
dataType: 'json',
success: function (cars) {
console.log(typeof cars); // prints the word 'object'
cars.sort(sort_timestamp);
// I tried these as well. They also only work sometimes
// cars.sort((a, b) => a.timestamp - b.timestamp);
// [].sort.call(cars).sort(sort_timestamp);
}
});
【问题讨论】:
-
console.log(Array.isArray(cars))向您展示了什么?所有数组都是对象,但并非所有对象都是数组。返回 JSON 的服务器端代码似乎并不总是返回一个数组 - 你能显示该代码的相关部分吗? -
您可以使用开发工具进行检查并转到网络选项卡,然后查看调用 ajax 时来自服务器的
response是什么?在它不起作用的那一刻 -
@nnnnnn 工作时显示 true,不工作时显示 false。如果对象实际上没有改变,怎么会发生这种情况
-
使用
console.log(JSON.stringify(cars))向我们展示结果是什么时候有效,什么时候无效 - 它们必须不同,否则您将不会得到您所描述的行为。在我看来,问题出在服务器端。 -
@antoni 当它不起作用时响应是
{}
标签: javascript jquery ajax sorting object