javascript - 在请求期间修改 jQuery $.ajax() success 方法

标签 javascript jquery

在我正在开发的网络应用程序中,可能会出现长时间运行的 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"
});

有没有办法修改 this._xhr.readyState = 2(已加载)之后和 this._xhr.readyState = 4(已完成)之前的成功回调

我尝试修改this._xhr.onreadystatechange,但发现jQuery没有定义onreadystatechange。

最佳答案

abort 方法听起来对我来说是最好的选择。

我对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*/ }

或者,您可以将所有逻辑放入一个成功方法中,并使用全局标志来确定要执行的操作:

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

关于javascript - 在请求期间修改 jQuery $.ajax() success 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1406960/

相关文章:

jquery - jQuery 1.5 的 jqXHR 的原因/主要好处是什么?

javascript - 当用户在 Mozilla Firefox 上放大和缩小页面时,如何保持 <div> 的大小不变

javascript - 如何删除包含破坏 C5 接口(interface)的错误 JavaScript 的 block ?

javascript - 使用 javascript 连接对象数组

javascript - 在剑道网格中显示对象内部的对象

javascript - 如何使用 Ajax 调用在 application.js 中正确执行 jquery 请求

javascript - VS代码中的伪元素抛出语法错误

javascript - 获取隐藏 div 的计算高度

javascript - 使 tr 宽度与粘性表格标题上的 thead 宽度匹配

javascript - $.ajax提交表单,有时成功有时出错