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