Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
未定义变量上的javascript错误_Javascript_Jquery - Fatal编程技术网

未定义变量上的javascript错误

未定义变量上的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

我有点困惑,为什么我得到'味精'是未定义的错误(警报(味精)行)在下面的代码。如果我至少有一个不正确的地址(地址:0),那么我希望下面的代码设置inValidUser=1,并设置msg变量,然后中断循环。然而,我得到了一个javascript错误“error:'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
    });   
}
功能测试(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
。对。虽然上面的语句暗示了这一点,但我会澄清