我正在执行一个AJAX调用(使用dojo),我想知道将调用对象传递给回调函数的最佳方法是什么
var that = this;
dojo.xhrGet({
url : 'script.php',
handleAs : "javascript",
load : function(response){
/*The callback on success*/
console.log('Ajax Completed Successfully for: ' + that.name);
}
});
我的问题是load
是否在'编译时'创建,或者是否在'运行时'进行评估。基本上,如果that
的值在创建var that = this
之间以及在AJAX返回并调用load
之后调用它时发生变化,这个更改是否会反映在load
中?如果是这样,那么确保AJAX返回信号调用正确对象的最佳做法是什么?我是否必须为每个对象创建特定的加载函数?
谢谢
答案 0 :(得分:4)
您可以将加载内容放在closure
:
(function(that){
dojo.xhrGet({
url : 'script.php',
handleAs : "javascript",
load : function(response){
/*The callback on success*/
console.log('Ajax Completed Successfully for: ' + that.name);
}
});
})(this);
(function(x){ })(x);
部分是一个自执行函数,它将x
或this
的值作为自执行函数的参数。值x
或that
保持原样。
答案 1 :(得分:1)
根据您的目的,您可以避免使用延迟来使用load:
进行创建:
function get_data(){
return dojo.xhrGet({
url : 'script.php',
handleAs : "javascript",
});
}
function other_function(){
var that = this;
get_data().then(function(response){
console.log("Ajax completed for" + that.name);
});
}
(我不记得当ajax失败时这是否也有效 - 需要测试这一点)