2009-09-21 15 views
1

如果服务器端不回应任何回应,ajax如何知道它是失败还是成功?有没有人在ajax请求期间成功追踪未捕获的异常?

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

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

未捕获的异常:[异常... “组件返回故障代码: 0x80040111(NS_ERROR_NOT_AVAILABLE) [nsIXMLHttpRequest.statusText]” nsresult: “0x80040111 (NS_ERROR_NOT_AVAILABLE)” 位置: “JS帧:: http://localhost/script/tab.js :: 匿名::线69” 的数据:无]

服务器端代码是:

$id = process(); 

以及用于测试的目的,我有出口()过程();

是这种例外的原因吗?如果是这样,为什么?

编辑 我打量了导致异常的行,这是这里的$。阿贾克斯()

error:function(XMLHttpRequest, textStatus, errorThrown){ 
    alert(XMLHttpRequest.statusText);alert(textStatus);alert(errorThrown); 
} 

什么不对的错误处理功能?

+0

我删除了“$ id =”,它仍然报告这个异常。为什么不能调用exit()? – omg

+0

你期望'exit()'做什么? – ijw

+0

完整的响应很长,我调用exit()来截断结果。 – omg

回答

0

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

欲了解更多信息,请参阅Wikipedia: List of HTTP status codes

+0

状态码是如何从服务器端生成的? – omg

+0

这是一个头部变量,需要随您的回复一起发送。例如,在PHP中,您可以执行标题(“HTTP/1.0 404 Not Found”);这是一个状态码为404的响应。 –

0

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

0

有迹象表明,你可以得到四种可能:

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

在任何情况下,所有的错误场景被Javascript核心的XMLHttpRequest实现处理 - jQuery的只是包装起来略有整洁的界面。

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

+0

添加了#4 - 无效的返回格式。可能你导致了一个无效的HTTP响应,但是这是不可能的,因为我们不知道你正在使用的是什么服务器端语言...... – ijw

+0

服务器对我的请求没有任何回应。 – omg

+0

“没有” - 没有身体?没有标题?什么? – ijw

1

httprequest还返回一个状态,例如200 == ok,404 ==找不到,12152 ==连接被服务器关闭等。 只读了状态ID的含义,所以你可以看看为他们。你也可以出于调试的原因直接写出myhttprequest.status文件,并显示它返回的状态。

+0

但是我从firebug中看不到任何状态代码。 – omg

0

你是否缺少{}?

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

应该

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

如果仅此而已,对不起,伙计,这将是烦人已经花了这么多时间,哈哈

0

我在我的AJAX指定超时解决了这个问题呼叫。 ajax超时只是在X时间后放弃。尽管页面最终返回了数据,但ajax对象刚放弃并保存,但抛出了这个错误。

相关问题