2010-06-13 76 views
3

我通过jQuery做了2个不同的ajax请求,我必须检查另一个是否活动。我怎样才能做到这一点 ?检查jQuery AJAX请求状态

例如从我的Ajax请求之一:

active_project_categories_ajax = $.ajax(
{ 
    url: "/ajax/get_skill_list", 
    dataType: 'json', 
    ...... 
}); 

我需要类似的东西:active_project_categories_ajax.status()

回答

5

因为你找回XMLHttpRequest对象,您可以随时看:坚持到这是你已经做

active_project_categories_ajax.readyState 
active_project_categories_ajax.status 

readyState需要为4才能完成(成功或错误)。所以如果它小于4,那么它仍然是活跃的。

这是readyState的:

// states 
    const unsigned short UNSENT = 0; 
    const unsigned short OPENED = 1; 
    const unsigned short HEADERS_RECEIVED = 2; 
    const unsigned short LOADING = 3; 
    const unsigned short DONE = 4; 

转引自:http://www.w3.org/TR/XMLHttpRequest/#the-xmlhttprequest-interface

你可以不看状态的readyState变成4,前否则有可能会引发异常。 (实际上,我写了一个返回1MB数据的php文件,当readyState为3时,状态也是200.如果readyState在2停止,我怀疑状态是200)。

+0

什么样的异常? – Anurag 2010-06-13 09:28:24

+0

这是我从Firebug控制台得到的:未捕获的异常:[Exception ...]组件返回失败代码:0x80040111(NS_ERROR_NOT_AVAILABLE)[nsIXMLHttpRequest.status]“nsresult:”0x80040111(NS_ERROR_NOT_AVAILABLE)“location:”JS frame :: http://www.somewebsite.com/proj/js/ajax_status/ :: anonymous :: line 54“data:no] – 2010-06-13 10:31:51

3

你会怎么做,通过订阅AJAX events和更新状态指示:

var status; 

$.ajax({ 
    beforeSend: function(){ 
    status = 1; 
    }, 
    complete: function(){ 
    status = 2; 
    } 
    // ... 
}); 
1

你几乎在那里,statusXMLHttpRequest的财产,而不是一个函数。 jQuery.ajax返回XMLHttpRequest的对象。在需要的时候

var req = $.ajax(..); 

然后调用status那个对象上,而不是status()

req.status