2009-06-24 27 views
1

每当我在向IE处理器发出AJAX请求时返回一个类型为text/plain的小响应时,IE都会收到此错误。看来这个错误会开始发生,发生几次,然后停止。很烦人。AJAX错误:完成此操作所需的数据不可用

我正在使用最新的jQuery库。当我尝试访问xhr.responseText时,错误将引发complete()函数。我怎样才能防止这种情况发生?

$.ajax({ 
    url: "Inquire.ashx", 
    data: data, 
    dataType: "text", 
    timeout: 5000, 
    complete: function(xhr, status) { 
     var resp = xhr.responseText; // ERROR! 

     if(resp.substr(0, 4) == "http") 
     window.open(resp, "PopWin"); 
     else 
     showError(resp); 
    } 
    }); 

回答

0

事实证明,错误是由于XmlHttpRequest的readyState属性为3而导致的,这意味着请求仍在进行中。我不明白为什么jQuery在readyState是4之前激发我的完整功能!我把这个在我的成功回调的最顶端,并没有看到因为错误...

if(xhr && xhr.readyState != 4) { 
    setTimeout(arguments.callee, 50); 
    return; 
    } 

这是我最讨厌一个非常丑陋的解决方案,但它似乎来解决这个问题。

0

我没有直接使用jQuery的Ajax功能,所以我只是种猜测这里,但:

您是否尝试过使用success代替complete

您是否试过其他dataType s?基于the jQuery documentation,我不希望文字dataType返回一个对象,但如果它大部分时间工作,这似乎不太可能成为问题。

+0

谢谢。 “完成”回调实际上在“成功”后被调用,所以我不认为会帮助任何东西,但它可能值得尝试。如果我使用不同的数据类型,jQuery将尝试处理它,我不想要,因为处理程序返回纯文本字符串。 – 2009-06-24 19:17:49

1

我知道这个问题已经过去了一个月,但我想我知道你的问题是什么。

完成()回调在调用success()或error()后执行。在你的情况下,我怀疑你的调用是超时的,所以如果你提供了一个错误回调,它会触发,但在这种情况下,complete()会在3时被readyState调用。只需增加超时和/或检查这个错误状态。

相关问题