Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/71.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 jQuery变量在闭包内的可见性_Javascript_Jquery_Ajax - Fatal编程技术网

Javascript jQuery变量在闭包内的可见性

Javascript jQuery变量在闭包内的可见性,javascript,jquery,ajax,Javascript,Jquery,Ajax,关于此代码: $.each(divList, function(){ var dropdown = ''; $.get("ajax.php",{'some':'params', 'other':'params'},function(msg){ dropdown = msg; console.log( dropdown ); }); console.log( dropdown ); $(dropdown).appendTo(

关于此代码:

$.each(divList, function(){ 
    var dropdown = '';
    $.get("ajax.php",{'some':'params', 'other':'params'},function(msg){
        dropdown = msg;
        console.log( dropdown );
    });
    console.log( dropdown );
    $(dropdown).appendTo($(this));
});
…第一个日志显示下拉变量保存从ajax返回的正确文本,第二个为空(appendTo不执行任何操作)

有没有办法让这一切顺利?所使用的浏览器是否存在依赖关系?

$。get()
是异步的:它返回速度非常快,在后台执行工作,并通过调用您提供的回调函数发出完成信号

由于对
console.log()
的第二次调用和对
appendTo()
的调用都在回调之外,因此在
$.get()
完成并设置
下拉列表之前,它们将运行得太快

通常的模式是在回调函数中调用
appendTo()

$.each(divList, function() {
    $.ajax({
        url: "ajax.php",
        data: {
            // your parameters...
        },
        context: this,
        success: function(msg) {
            console.log(msg);
            $(msg).appendTo(this);
        }
    });
});
编辑:如果要从回调函数访问原始的
引用,可以像上面的代码那样,在
上下文
选项中将其传递给。

$。get()
是异步的:返回速度非常快,在后台执行其工作,并通过调用您提供的回调函数发出完成信号

由于对
console.log()
的第二次调用和对
appendTo()
的调用都在回调之外,因此在
$.get()
完成并设置
下拉列表之前,它们将运行得太快

通常的模式是在回调函数中调用
appendTo()

$.each(divList, function() {
    $.ajax({
        url: "ajax.php",
        data: {
            // your parameters...
        },
        context: this,
        success: function(msg) {
            console.log(msg);
            $(msg).appendTo(this);
        }
    });
});

编辑:如果要从回调函数访问原始的
引用,可以在
上下文
选项中将其传递给,就像上面的代码那样。

$get
范围之外的
分配给新变量,您可以在成功处理程序中访问它

分配给
$get
范围之外的一个新变量,您可以在成功处理程序中访问该变量

分配给函数顶部的一个变量,以便异步ajax调用可以访问该变量:

$.each(divList, function(){ 
    var me = this;
    $.get("ajax.php",{'some':'params', 'other':'params'},function(msg){
        var dropdown = msg;
        console.log( dropdown );
        $(dropdown).appendTo($(me));
    });
})

将此
分配给函数顶部的变量,以便异步ajax调用可以访问该变量:

$.each(divList, function(){ 
    var me = this;
    $.get("ajax.php",{'some':'params', 'other':'params'},function(msg){
        var dropdown = msg;
        console.log( dropdown );
        $(dropdown).appendTo($(me));
    });
})

不要。有没有办法在$.get()方法中访问$(this)(divList中的元素)?是否可以将其保存在变量或类似的文件中?是的,刚刚尝试过。只需使用var which=$(this)保存它,并在闭包中使用它。谢谢。您正在向服务器发送
上下文:
。这对回调上下文没有帮助。@amnotiam,非常正确,
$.ajax()
必须被调用才能实现这一点。答案相应地更新了,谢谢提醒:)看来设置上下文是正确的方法。它还使多个$.get()按预期工作。有没有办法在$.get()方法中访问$(this)(divList中的元素)?是否可以将其保存在变量或类似的文件中?是的,刚刚尝试过。只需使用var which=$(this)保存它,并在闭包中使用它。谢谢。您正在向服务器发送
上下文:
。这对回调上下文没有帮助。@amnotiam,非常正确,
$.ajax()
必须被调用才能实现这一点。答案相应地更新了,谢谢提醒:)看来设置上下文是正确的方法。它还使多个$.get()按预期工作。如果在同一上下文中有多个$,则似乎不起作用。如果在同一上下文中有多个$,则仅使最后一个appendTo工作。如果在同一上下文中有多个$,则似乎不起作用。如果在同一上下文中有多个get,则仅使最后一个appendTo工作。