2011-07-14 53 views
2

我執行AJAX調用(與道場),我想知道有沒有給調用對象傳遞給回調函數國家的Javascript全局變量的內部功能結合

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

在JavaScript中沒有**編譯時**這樣的事情,它是**運行時**! – Bakudan

+0

這就是爲什麼我把它們放在引號中。大多數腳本語言實際上不編譯,他們解釋。我假設這是相同的情況ehre – puk

回答

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仍然應該是。

+0

太棒了!我知道有''(函數(x){})(x)的用法''除了看起來像你是一個經驗豐富的JS編碼器。 – puk

1

取決於你想做什麼,你可以避免與load:建立在所有使用deferreds:

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失敗,這也適用 - 需要測試這一點)

+0

我更喜歡betamax的答案,因爲它更易於閱讀,並且不會將Ajax調用分開。儘管如此,感謝您對'then'語句的教育 – puk