Jquery ajax 参数回调和变量作用域
Jquery ajax parametric callback and variable scope
我在 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 可能不会处理它们的响应。我的意思是回调参数值会以某种方式混合?
如果可能的话在回答中给出一些详细的解释
I mean callback argument value will be somehow mixed?
没有。回调将在原始 AJAX success
处理程序的范围内以完全独立的调用方式调用。任何一个请求的数据都不会交叉污染。
此外,顺便说一句,您可以更改此设置:
success: function(data){
callback(data);
},
仅此而已:
success: callback,
查看此示例,希望对理解 JavaScript
中的范围有所帮助
var isFirstCall=false;
function doAjax(param)
{
if(!isFirstCall)
{
//for example after do ajax
var millisecondsToWait = 1000;
setTimeout(function() {
console.log(param);
}, millisecondsToWait);
}
isFirstCall=true;
console.log(param);
}
doAjax('first call');
doAjax('second call');
我在 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 可能不会处理它们的响应。我的意思是回调参数值会以某种方式混合?
如果可能的话在回答中给出一些详细的解释
I mean callback argument value will be somehow mixed?
没有。回调将在原始 AJAX success
处理程序的范围内以完全独立的调用方式调用。任何一个请求的数据都不会交叉污染。
此外,顺便说一句,您可以更改此设置:
success: function(data){
callback(data);
},
仅此而已:
success: callback,
查看此示例,希望对理解 JavaScript
中的范围有所帮助var isFirstCall=false;
function doAjax(param)
{
if(!isFirstCall)
{
//for example after do ajax
var millisecondsToWait = 1000;
setTimeout(function() {
console.log(param);
}, millisecondsToWait);
}
isFirstCall=true;
console.log(param);
}
doAjax('first call');
doAjax('second call');