所以我知道有大量關於AJAX和使用上下文的線程,但經過幾個小時的閱讀和嘗試,我打開一個新的線程。在AJAX調用中使用「context:...」的正確方法是什麼?
所以我有這個(縮短版)JavaScript函數:
this.CallService = function() {
var Type = this.Type;
var Url = this.Url;
var Data = this.Data;
var ContentType = this.ContentType;
var DataType = this.DataType;
var ProcessData = this.ProcessData;
var ClipUrl = this.ClipUrl;
var CountMax = this.CountMax;
var Callback = this.Callback;
var SucceededServiceCallback = this.SucceededServiceCallback;
var FailedServiceCallback = this.FailedServiceCallback;
return $.ajax({
type: Type, //GET or POST or PUT or DELETE verb
url: Url, // Location of the service
data: Data, //Data sent to server
contentType: ContentType, // content type sent to server
dataType: DataType, //Expected data format from server
processdata: ProcessData, //True or False
context: this,
}).done(function (msg) {//On Successfull service call
SucceededServiceCallback(this, msg);
}).fail(function (msg) {
FailedServiceCallback(this, msg);
});
}
這裏的重要組成部分,是context: this
和兩個回調done
和fail
。 IM這兩個回調我給this
背景下我的回調函數:
this.SucceededServiceCallback = function (context, result) {
if (null != context) {
UpdateDebugInfo(context, "succeeded: " + context.DataType + " URL: " + context.Url + " Data: " + context.Data + " Result: " +result);
}
if (context != null && context.DataType == "json" && result != null && context.Callback != null) {
context.Callback(context, result);
}
}
在這裏,重要的是,我使用上下文看訪問的變量數據類型,回調,URL等
現在的問題是,上下文被設置爲最後使用的上下文(這是一個異步調用,所以所有變量都是上次調用的變量)。 所以我很確定那個context: this,
部分有問題。我只是不知道如何使用這個權利。謝謝你的幫助。
tl; dr:
在Ajax調用中使用context: this
。上下文總是被設置爲最後的「this」。我想用這個電話的「這個」。
如果我理解你的問題,請嘗試:'背景:$ .extend({} ,這個),' –
@ A.Wolff將克隆他的整個對象,這可能是矯枉過正,可能會引入其他問題(例如:假設他們以後是同一個對象)。最好只是創建一個包含OP感興趣的字段的對象。 –
@AlexMcMillan我很同意。你的回答確實很乾淨 –