Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/417.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 ajax参数化回调和变量范围_Javascript_Jquery_Scope - Fatal编程技术网

Javascript Jquery 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' }); }

我对javascript变量范围不太在行,只遇到了一个问题

如果我有一个函数,它调用ajax,然后调用我的回调函数

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可能不会处理它们的响应。我的意思是回调参数值将以某种方式混合

如果可能的话,在回答中给出一些详细的解释

我的意思是回调参数值将以某种方式混合

否。回调将在原始AJAX
success
处理程序的范围内以完全独立的调用进行调用。两个请求中的数据都不会交叉污染

此外,作为旁白,您可以更改以下内容:

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以某种方式运行在确切的变量作用域环境中,一旦它们的回调触发,只有正确的变量作用域可用?它叫什么名字?