Javascript Jquery ajax参数化回调和变量范围
我对javascript变量范围不太在行,只遇到了一个问题 如果我有一个函数,它调用ajax,然后调用我的回调函数Javascript Jquery ajax参数化回调和变量范围,javascript,jquery,scope,Javascript,Jquery,Scope,我对javascript变量范围不太在行,只遇到了一个问题 如果我有一个函数,它调用ajax,然后调用我的回调函数 function doAjaxFunc(param, callback) { $.ajax({ type: 'GET', url: '/some/url/'+param, success: function(data){ callback(data); }, dataType:'json' }); }
function doAjaxFunc(param, callback)
{
$.ajax({
type: 'GET',
url: '/some/url/'+param,
success: function(data){
callback(data);
},
dataType:'json'
});
}
function someCallback1(ajaxResp){
// DO someting 1
}
function someCallback2(ajaxResp){
// DO someting 2
}
// exec
doAjaxFunc(1, someCallback1);
doAjaxFunc(2, someCallback2);
由于ajax是异步的,而且服务器处理param=1的时间可能比处理param=2的时间长,所以someCallback1和someCallback2可能不会处理它们的响应。我的意思是回调参数值将以某种方式混合
如果可能的话,在回答中给出一些详细的解释
我的意思是回调参数值将以某种方式混合
否。回调将在原始AJAXsuccess
处理程序的范围内以完全独立的调用进行调用。两个请求中的数据都不会交叉污染
此外,作为旁白,您可以更改以下内容:
success: function(data){
callback(data);
},
为此:
success: callback,
检查这个例子,我希望它对理解JavaScript中的作用域有所帮助
var isFirstCall=false;
函数doAjax(param)
{
如果(!isFirstCall)
{
//例如,在使用ajax之后
var毫秒Towait=1000;
setTimeout(函数(){
控制台日志(param);
},毫秒);
}
isFirstCall=true;
控制台日志(param);
}
doAjax(“第一次调用”);
doAjax(“第二次调用”)代码>这取决于您如何定义“混合”。每个请求都将被调用以获得正确的参数,但不能保证执行顺序,因为请求可以在任何情况下完成order@charlietfl在mix i mend value mixing下,顺序并不重要。谢谢您的回答。所以,您的意思是,在每个ajax成功函数中,只有其父doAjaxFunc函数传递了参数才可用,对吗?evan如果我将10个不同的参数传递给doAjaxFunc(param1,param2…),是的,这是正确的。有什么名字吗?因此,我将谷歌和阅读更多,以了解一般术语是“范围”。这与变量和参数中的上下文有关。您似乎已经从问题标题中了解到了这一点:)好的,谢谢,接受您在答案列表中首先发布的答案谢谢您的回答。我理解这里发生的事情,但我想了解原因。所以,setTimeoput和jquery ajax以某种方式运行在确切的变量作用域环境中,一旦它们的回调触发,只有正确的变量作用域可用?它叫什么名字?