如何获得Jquery Ajax Readystates

sha*_*nth 5 ajax jquery

我怎么能通过jquery知道ajax请求的readystates?通常,不使用jquery,我们将发送一个这样的ajax请求:

http.open("POST", url, true);

http.onreadystatechange = function() { 
    if(http.readyState == 4 && http.status == 200) {
        // do something
    }
}
Run Code Online (Sandbox Code Playgroud)

因此,我可以使用上面的代码轻松跟踪1到4的readystate值,并执行必要的操作,例如当readystate为1时显示加载图标.

但是通过jquery ajax调用,我如何跟踪readystate值?

我正在通过jquery进行ajax调用,如下所示:

$.post('ajax/test.html', function(data) {
  $('.result').html(data);
});
Run Code Online (Sandbox Code Playgroud)

Fel*_*ing 11

看看文档$.ajax.你有可能传递不同的回调(也许不是为了外翻"就绪状态",但对于指标来说已经足够了):

beforeSend(jqXHR, settings) 函数
一个预请求回调函数,可用于jqXHRXMLHTTPRequest发送之前修改(在jQuery 1.4.x中)对象.使用它来设置自定义标题等.jqXHRsettingsmap作为参数传递.这是一个Ajax事件.返回falsebeforeSend功能将取消该请求.从jQuery 1.5开始,beforeSend无论请求的类型如何,都将调用该选项.

success(data, textStatus, jqXHR) Function,Array
如果请求成功,则调用的函数.该函数传递三个参数:data从服务器返回,根据dataType参数格式化; 描述状态的字符串; 和jqXHR(在jQuery 1.4.x中XMLHttpRequest)对象.从jQuery 1.5开始,成功设置可以接受一系列函数.每个函数将依次调用.这是一个Ajax事件.

error(jqXHR, textStatus, errorThrown) 函数
如果请求失败,则调用的函数.该函数接收三个参数:(jqXHR在jQuery 1.4.x中XMLHttpRequest)对象,描述发生的错误类型的字符串和可选的异常对象(如果发生).对于第二个参数(除了可能的值null)是"timeout","error","abort",和"parsererror".这是一个Ajax事件.从jQuery 1.5开始,该error设置可以接受一系列函数.每个函数将依次调用.注意:不会为跨域脚本和JSONP请求调用此处理程序.

complete(jqXHR, textStatus) Function,Array
在请求完成时(执行after successerrorcallbacks 后)要调用的函数.这个函数会得到两个参数:jqXHR(jQuery中1.4.x中,XMLHTTPRequest)对象和一个字符串分类所述请求的状态("success","notmodified","error","timeout","abort",或"parsererror").从jQuery 1.5开始,该complete设置可以接受一系列函数.每个函数将依次调用.这是一个Ajax事件.

因此,最好的想法是在回调中显示指标beforeSend并将其隐藏complete.


例:

因此,您必须将代码重写为:

$.ajax({
  url: 'ajax/test.html',
  type: 'POST',
  beforeSend: function() {
       // show indicator
  },
  complete: function() {
      // hide indicator
  },
  success: function(data) {
      $('.result').html(data);
  }
});
Run Code Online (Sandbox Code Playgroud)

虽然我不明白为什么你使用POST,因为你没有发送任何数据(至少在你的示例代码中).