【发布时间】:2015-12-21 23:16:43
【问题描述】:
当我的页面加载时,我有一个内置在 jQuery AJAX 调用中的多维数组,称为 sumArr。
$( document ).ready( function() {
...
$.ajax({
type: 'GET',
url: 'models/table.php',
mimeType: 'json',
success: function(data) {
var sumCount = 0;
var sumArr = [];
$( "#sum-body" ).empty();
$.each(data, function(i, data) {
sumArr.push([
data[0],
data[1],
data[2],
data[3],
data[4],
data[5],
data[6],
data[7],
data[8],
data[9]
]);
var body = "<tr class='clickable-row'>";
body += "<td>" + data[0] + "</td>";
body += "<td>" + data[1] + "</td>";
body += "<td>" + data[2] + "</td>";
body += "<td>" + data[3] + "</td>";
body += "<td>" + data[4] + "</td>";
body += "<td>" + data[5] + "</td>";
body += "<td>" + data[6] + "</td>";
body += "<td>" + data[7] + "</td>";
body += "<td>" + data[8] + "</td>";
body += "<td>" + data[9] + "</td>";
body += "</tr>";
$( body ).appendTo( $( "#sum-body" ) );
sumCount = sumCount + 1;
});
console.log(sumArr);
});
...
});
我有另一个函数尝试重新排序数组。我最终会在我的 HTML 页面上显示该数组。
function compareCols(arr, cols) {
arr.sort(function (a, b) {
console.log("comparing " + a[cols] + ", " + b[cols]);
if (a[cols] > b[cols]) {
return 1;
}
if (a[cols] < b[cols]) {
return -1;
}
return 0;
});
}
compareCols('sumArr', 0);
console.log(sumArr);
当我的页面加载时,我收到以下错误:
Uncaught TypeError: arr.sort is not a function
这令人费解,因为我有一个更简单的代码版本作为示例,它可以正常工作。见下文:
var items = [
['Edward', 21],
['Sharpe', 37 ],
['And', 45 ],
['The', -12 ],
['Magnetic', 0 ],
['Zeros', 37 ]
];
function compareCols(arr, cols) {
arr.sort(function (a, b) {
console.log("comparing " + a[cols] + ", " + b[cols]);
if (a[cols] > b[cols]) {
return 1;
}
if (a[cols] < b[cols]) {
return -1;
}
return 0;
});
}
compareCols(items, 0);
console.log(items);
我似乎找不到这段代码出错的地方。谁能发现错误在哪里?我梳理了代码,找不到任何东西。我猜它与AJAX有关,但不确定。我最初将数组作为对象,但将其更改为一个或多个数组。
【问题讨论】:
-
嗯,
sumArr不是arr,而且ajax 调用是异步的,数组在回调之外不可用? -
您是否将其称为字符串? compareCols('sumArr', 0);控制台.log(sumArr);注意 sumArr 在 ''
标签: javascript jquery arrays ajax sorting