AJAX错误:完成此操作所需的数据不可用

在向处理程序发出AJAX请求时,我偶尔会在IE中收到此错误,该处理程序返回text / plain类型的小响应。 似乎这个错误将开始发生,发生几次,然后它就会停止。 很烦人。

我正在使用最新的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); } }); 

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

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

我没有直接使用jQuery Ajaxfunction,所以我只是在猜测,但是:

您是否尝试过使用success而不是complete

你试过其他dataType吗? 基于jQuery文档 ,我不希望文本dataType返回一个对象,但如果它在大多数时间工作,那似乎不太可能是问题。

事实certificate,错误是由于XmlHttpRequest的readyState属性为3而引起的,这意味着请求仍在进行中。 我不明白为什么jQuery在readyState为4之前触发我的完整函数! 我把它放在我成功回调的最顶端,并且自从没有看到错误…

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

这是一个我讨厌的非常难看的解决方案,但似乎解决了这个问题。