Javascript 什么是正确的使用方法;背景:……”;在AJAX调用中?

Javascript 什么是正确的使用方法;背景:……”;在AJAX调用中?,javascript,jquery,ajax,Javascript,Jquery,Ajax,所以我知道有很多关于AJAX和上下文使用的线程,但是在阅读和尝试了几个小时后,我打开了一个新线程 所以我有一个(缩短版本)javascript函数: this.CallService = function () { var Type = this.Type; var Url = this.Url; var Data = this.Data; var ContentType = this.ContentType; var DataType = this.Da

所以我知道有很多关于AJAX和上下文使用的线程,但是在阅读和尝试了几个小时后,我打开了一个新线程

所以我有一个(缩短版本)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);
    });
}
这里重要的部分是
上下文:this
和两个回调
done
fail
。在这两个回调中,我为回调函数提供
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等。
现在的问题是,上下文被设置为最后使用的上下文(这是一个异步调用,因此所有变量都是最后一个调用中的变量)所以我很确定
上下文有问题:这个,
部分。
我只是不知道如何正确使用它。谢谢你的帮助

tl;博士:
我在Ajax调用中使用
context:this
。上下文始终设置为调用的最后一个“this”。我想使用调用的“this”。

在发出每个请求之前,您正在“缓存”所有变量,但在
SucceededServiceCallback
函数中,您正在检查
this.XXX
-这不是您期望的
var类型,而是实际的
this.Type
本身

您可以将这些属性放入对象中,并将其作为上下文传递,而不是主对象:

this.CallService = function () {
    var context = {
        Type : this.Type,
        Url : this.Url,
        Data : this.Data,
        ContentType : this.ContentType,
        DataType : this.DataType,
        ProcessData : this.ProcessData,
        ClipUrl : this.ClipUrl,
        CountMax : this.CountMax,
        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: context,
    }).done(function (msg) {//On Successfull service call
        SucceededServiceCallback(this, msg);
    }).fail(function (msg) {
        FailedServiceCallback(this, msg);
    });
}

如果我理解您的问题,请尝试:
context:$.extend({},this),
@A.Wolff,这将克隆他的整个对象,这可能会造成过度杀伤力,并可能会引入其他问题(例如:假设以后它们是同一个对象)。最好只创建一个包含OP感兴趣的字段的对象。@AlexMcMillan我完全同意。你的答案更清晰,所以这个版本运行得很好,非常感谢@Alex McMillan