Javascript 在请求期间修改jQuery$.ajax()成功方法

Javascript 在请求期间修改jQuery$.ajax()成功方法,javascript,jquery,Javascript,Jquery,在我正在开发的web应用程序中,可能会出现运行时间很长的ajax查询 我使用jQuery的$.ajax方法执行以下操作: this._xhr = jQuery.ajax({ type: "GET", url: "/path/to/service", data: "name=value", success: function(data, message){ // handle a success }, dataType: "json"

在我正在开发的web应用程序中,可能会出现运行时间很长的ajax查询

我使用jQuery的$.ajax方法执行以下操作:

this._xhr = jQuery.ajax({
    type: "GET",
    url: "/path/to/service",
    data: "name=value",
    success: function(data, message){
        // handle a success
    },
    dataType: "json"
});
是否有方法在此之后修改成功回调。\u xhr.readyState=2(已加载)和在此之前修改成功回调。\u xhr.readyState=4(已完成)


我试图修改它。xhr.onreadystatechange但是发现jQuery没有定义onreadystatechange。

对我来说,
中止方法听起来是最好的选择

我不太了解
ajax
方法的内部结构,但我可以想出一些方法来实现您想要的功能。两者都涉及全局状态,如果您的用户可以在第一个请求完成之前发送第二个请求,则会中断,因此我不确定是否推荐它们

首先,您可以保留对成功方法的引用,并对其进行更改:

MySuccessMethod = function(d, m) { /* handle a success */ };

this._xhr = jQuery.ajax({
    type: "GET",
    url: "/path/to/service",
    data: "name=value",
    success: function(data, message){ MySuccessMethod(data, message); },
    dataType: "json"
});


// later...
// user cancels request, so change the success method
MySuccessMethod = function(d, m) { /*print a simple message*/ }
或者,您可以将所有逻辑放在one success方法中,并使用全局标志确定要执行的操作:

success: function(data, message){
    if (RequestHasBeenCancelled) {
        //display a simple message
    }
    else {
        // handle a success
    }
},

你能解释一下你为什么要这样做吗?也许有一个解决方案,不涉及在代码的中间使用<代码>成功/代码>函数。成功方法做了一些昂贵的处理,但是用户可以在长时间运行的Ajax请求中执行真正的取消请求的UI中的附加动作。如果发生这些操作,我将更改运行查询的success方法,以便在查询最终完成后显示一条简单消息,而不是执行不再需要的所有处理。我可以使用abort()方法,这可能是正确的方法,但我很好奇是否可以修改success函数谢谢,我现在已经使用了
abort
,但我喜欢你第一个建议中的想法,我可以接受这个想法,应用类似于我的代码的东西,实际上不涉及全局状态。再次感谢。