所以我知道有大量关于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我很同意。你的回答确实很干净 –