jQuery $ .ajax和readyStates

tet*_*ris 8 ajax jquery readystate onreadystatechange

如何在jQuery $.ajax方法上调用Ajax就绪状态?

Nic*_*ver 5

$.ajax()返回 XmlHttpRequest 对象,所以如果你真的想在状态改变时访问它,你可以这样做:

var xhr = $.ajax({ ... });
xhr.onreadystatechange = function() { alert(xhr.readyState); };
Run Code Online (Sandbox Code Playgroud)

但是内置回调应该是大多数用途所需要的,特别是successcomplete

要在请求触发之前执行操作,请使用beforeSend,或者更适合大多数情况下的.ajaxStart().ajaxStop()事件...例如,在任何 ajax 活动正在进行时显示加载消息。


Jon*_*kis 5

方法,用 jQuery 2.0.2 测试:

$.ajax({
    beforeSend: function (jqXHR, settings) {
        var self = this;
        var xhr = settings.xhr;
        settings.xhr = function () {
            var output = xhr();
            output.onreadystatechange = function () {
                if (typeof(self.readyStateChanged) == "function") {
                    self.readyStateChanged(this);
                }
            };
            return output;
        };
    },
    readyStateChanged: function (xhr) {
        if (xhr.readyState == 1) {
            /* Connected! Do something */
        }
    },
    url: "..."
});
Run Code Online (Sandbox Code Playgroud)

基本上,我需要的是在readyState变成1(Connected)之后的回调,就我而言,这在使用 jQuery 实现长轮询“推送”通知时很有用。