未定义变量上的javascript错误
我有点困惑,为什么我得到'味精'是未定义的错误(警报(味精)行)在下面的代码。如果我至少有一个不正确的地址(地址:0),那么我希望下面的代码设置inValidUser=1,并设置msg变量,然后中断循环。然而,我得到了一个javascript错误“error:'msg'未定义”。有什么想法吗未定义变量上的javascript错误,javascript,jquery,Javascript,Jquery,我有点困惑,为什么我得到'味精'是未定义的错误(警报(味精)行)在下面的代码。如果我至少有一个不正确的地址(地址:0),那么我希望下面的代码设置inValidUser=1,并设置msg变量,然后中断循环。然而,我得到了一个javascript错误“error:'msg'未定义”。有什么想法吗 function test(userData) { var myArr = []; var i; for (i = 1; i <= 3; i++) { myAr
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
});
}
功能测试(userData){
var myArr=[];
var i;
对于(i=1;i您的代码中有一个作用域错误。当您使用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";
msg
变量不在alert()
的范围内。请在apply().done()
的顶部定义它,并删除$中的var
关键字。每个()
因为您在函数中声明它时使用了var
。您还必须在赋值之前删除var
。对。虽然上面的语句暗示了这一点,但我会澄清