Javascript全局变量绑定在函数内部

时间:2011-07-14 16:44:48

标签: javascript ajax variables scope

我正在执行一个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返回信号调用正确对象的最佳做法是什么?我是否必须为每个对象创建特定的加载函数?

谢谢

2 个答案:

答案 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);部分是一个自执行函数,它将xthis的值作为自执行函数的参数。值xthat保持原样。

答案 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失败时这是否也有效 - 需要测试这一点)