9

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

4

3 回答 3

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: "..."
});

基本上,我需要的是在readyState变为1(已连接)之后的回调,在我的情况下,这在使用 jQuery 实现长轮询“推送”通知时很有用。

于 2014-12-21T19:39:52.303 回答
5

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

var xhr = $.ajax({ ... });
xhr.onreadystatechange = function() { alert(xhr.readyState); };

但是内置回调应该是大多数用途所需要的,尤其是successcomplete.

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

于 2010-11-05T16:45:56.740 回答
1

您应该能够通过为传递给方法的对象中的 、 和 选项success设置error回调来获得所需的一切。看一下文档:completeajax()

http://api.jquery.com/jQuery.ajax/

基本上,它是这样工作的:

$.ajax({
    url: 'ajax/test.html',
    success: function(data) {
        alert('Load was performed.');
    },
    error: function() {alert("error occurred.")},
    complete: function() {alert("ajax complete.")}
});

您可以查看文档,了解您可以在回调函数中访问哪些参数。

于 2010-11-05T16:41:57.740 回答