我有点困惑为什么我得到'msg'是未定义的错误(警报(msg)行)在下面的代码中。如果我至少有一个不正确的地址(地址:0),那么我希望下面的代码设置inValidUser = 1并设置msg变量然后打破循环。但是,然后我得到一个javascript错误“错误:'msg'未定义。”有任何想法吗?
function test(userData) {
var myArr = [];
var i;
for (i = 1; i <= 3; i++) {
myArr.push(
jQuery.ajax({
type: "GET",
url: "http:/c.html/" + i,
});
);
}
$.when.apply($, myArr).done(function() {
var i = 0;
var invalidUser = 0;
var tableData = [];
$.each(arguments, function (idx, args) {
if (args[0].address === 0) {
invalidUser = 1;
var msg = "User Address " + userData[j].address + " not correct";
return false;
} else {
tableData.push({
name: userData[i].firstname,
age: userData[i].age
});
}
i++;
});
if (invalidUser `enter code here`=== 1) {
alert(msg);
} else {
addTableData(tableData);
}
}).fail (function (jqXHR, textStatus) {
//oops..failed
});
}
答案 0 :(得分:2)
您的代码中存在范围错误。当您使用var
声明变量时,它将绑定到声明语句出现的最近函数。
在这种情况下,它意味着:
$.each(arguments, function (idx, args) {
// ^^^^^^^^ ^ this scope
if (args[0].address === 0) {
invalidUser = 1;
var msg = "User Address " + userData[j].address + " not correct";
// ^^^ declares variable in new scope
return false;
} else {
tableData.push({
name: userData[i].firstname,
age: userData[i].age
});
}
i++;
});
您要做的是确保在msg
的两个用户都可以访问的范围内声明msg
。那将是:
$.when.apply($, myArr).done(function() {
var msg;
// ^^^^^^^^
var i = 0;
var invalidUser = 0;
var tableData = [];
这里,在你的情况下。
当您设置msg
时,您将使用变量赋值表达式,而不是声明:
msg = "User Address " + userData[j].address + " not correct";