ajax GET和POST中的变量范围

时间:2016-01-20 22:10:41

标签: javascript jquery ajax

我们最近观察到使用jQuery ajax时的行为,并想验证它是否合理。

例如,想象下面的代码:

function validate(e, inurl, formid, foo) {
    var v = $("#" + formid).serialize();
    $.ajax({
        url: inurl,
        type: 'POST',  // *** type here matters
        data: v,
        dataType: "JSON",
        success: function (data) {
            // *** e, inurl, formid, including v would all be undefined here
            // *** however, if ajax call type is GET, those variables would be valid
            // *** on the other hand, foo as a callback is preserved regardless
            if (foo)
                foo(data);
        }
    });    
}

这是一个设计行为,所以如果我们需要保留这些变量,我们必然会使用GET吗?如果是这样,任何相关的文件将不胜感激。

1 个答案:

答案 0 :(得分:0)

在玩了一下之后,我想我用错误的方法来证明这些变量是否有效。我所做的是在if (foo)之前设置一个断点并使用浏览器控制台检查那些变量 而不用 在{{{}内访问它们的任何语句1}}回调。因为即使ajax异步运行,只要它在其父函数中运行,它就可以基于javascript闭包访问该函数的变量(参考:http://www.w3schools.com/js/js_function_closures.asp)。但只有在回调中引用它们时才会出现这种情况,例如: success。这样,它们在父函数返回之前被捕获。当稍后触发回调时,这些变量仍然有效。希望这清除混乱。感谢所有评论。