有没有人在ajax请求期间成功跟踪未捕获的异常?

时间:2009-09-21 09:29:50

标签: php jquery ajax xmlhttprequest

如果服务器端没有回显任何内容,ajax如何知道它是失败还是成功?

$.ajax(error:..,success:..)

我在测试中遇到了这个例外:

  未被捕的例外:[例外......   “组件返回失败代码:   0x80040111(NS_ERROR_NOT_AVAILABLE)   [nsIXMLHttpRequest.statusText]”   nsresult:“0x80040111   (NS_ERROR_NOT_AVAILABLE)“位置:   “JS框架::   http://localhost/script/tab.js ::   anonymous :: line 69“data:no]

服务器端代码是:

$id = process();

为了测试,我在进程()中有 exit();

这是异常的原因吗?如果是,为什么?

修改 我查看导致异常的行,它是$ .ajax()

的错误处理函数
error:function(XMLHttpRequest, textStatus, errorThrown){ 
    alert(XMLHttpRequest.statusText);alert(textStatus);alert(errorThrown);
}

这里有什么不对吗?

7 个答案:

答案 0 :(得分:1)

httprequest还会返回一个状态,例如200 == ok,404 ==未找到,12152 ==连接由服务器关闭等等。 只需阅读状态ID是什么意思,这样你就可以找到它们。您也可以出于调试原因,只需将myhttprequest.status写入文档,它就会显示它返回的状态。

答案 1 :(得分:0)

这取决于请求返回的状态代码。成功请求返回的状态代码范围为2xx,错误范围为4xx的5xx。

有关详细信息,请参阅Wikipedia: List of HTTP status codes

答案 2 :(得分:0)

它仍然会从服务器获得响应,其中数据部分为空。如果它根本没有响应,那将是一个错误。

答案 3 :(得分:0)

http://docs.jquery.com/Ajax/jQuery.ajax#options

提供成功和错误选项这些函数将在调用后调用。

答案 4 :(得分:0)

您可以获得四种可能的方案:

  • 服务器不存在或拒绝连接(这可以通过浏览器使用的套接字库识别,这将报告连接失败)
  • 连接正常,服务器返回一个不成功的错误代码 - 这会返回到标题中。实际上,即使是空体,请求也可以成功(200代码),这是完全有效的
  • 连接出现但是服务器没有响应 - 我不清楚这个细节,但我希望JS最终超时,因为没有收到响应并基于此返回失败。 / LI>
  • 连接出现但服务器响应不正确(例如没有标头) - JS实现应该将此作为错误返回。

在任何情况下,所有错误场景都由Javascript核心的XMLHttpRequest实现处理 - jQuery只是用稍微整洁的界面包装它。

在您的情况下(现在您已提供了更多信息)我建议您使用Firebug查看服务器对您的请求的响应。也就是说,你不应该从服务器获得任何不适当的异常,JS应该为所有上述情况调用相同的错误回调。

答案 5 :(得分:0)

你错过了{}?

$.ajax(error:..,success:..)

应该是

$.ajax( { error: function( ){ } } );

如果就是这样,抱歉老兄,那花了那么多时间会很烦人,哈哈

答案 6 :(得分:0)

我通过在ajax调用中指定超时来修复此问题。在X时间之后,ajax超时才放弃。即使页面最终返回数据,ajax对象也放弃并保释,但抛出了这个错误。