Prototype或JQuery可以在AJAX请求上返回HTTP状态代码

url = "http://example.com" new Ajax.Request(url, { onComplete: function(transport) { alert(transport.status); } }); 

我希望如果网站正常工作则返回200状态,如果不工作则返回500等等。但是该代码一直返回0。

最终,我希望有一个setinterval函数,定期ping一个网站的正常运行时间状态。

使用JQuery,您应该使用类似于您拥有的代码获取您的状态,它将是这样的:

 $.ajax({ url: 'some.url.com', type: 'POST', complete: function(transport) { if(transport.status == 200) { alert('Success'); } else { alert('Failed'); } } }); 

如果你想使用原型,你的代码应该只添加:

  onXYZ:function(transport){ } 

在上面的文本中,XYZ应替换为您要为响应捕获的http状态代码。

希望这可以帮助

Ajax库本身并不“返回状态代码”; 该代码是服务器响应中返回的HTTP响应代码。 状态代码200表示成功; 404表示“未找到”等。

响应代码0可能意味着甚至没有尝试过请求。 请求URL是否在与该页面来源相同的域(子域,如果适用)下? 如果没有,那么您可能会遇到同源策略的问题,这会阻止脚本创建任意请求。

要解决此问题,您需要在服务器端代理数据; 例如,使用脚本/框架处理程序/执行Web请求的任何内容,并将数据传递回客户端。 调用“本地”代理而不是远程数据源。

Prototype有onXYZ回调 ,例如:

 new Ajax.Request(url, { method: 'get', on500: function(transport) { alert("failed!"); }, onSuccess: function(transport) { alert("success!"); } }); 

但事情上,如果网站关闭(如同,无法访问),它将不会返回500错误,因此您的方法对初学者来说不是很好。

通过创建服务器端代理文件来传递状态代码,我能够使远程域工作。 我使用这篇文章中的代码创建了一个asp.net页面,它只是将页面的状态代码设置为Web请求状态代码。

然后我使用了Chermosillo提供的ajax示例。

 $.ajax({ url: 'URLTestProxy.aspx?url=http://some.url.com', type: 'POST', complete: function(transport) { if(transport.status == 200) { alert('Success'); } else { alert('Failed'); } } }); 

这样,您可以绕过相同的原始策略,仍然可以获取远程URL的状态代码。

知道示例中的传输参数是XMLHttpRequest对象可能会有所帮助。 可以在此处找到此对象提供的方法和属性的完整详细信息:

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

在这个问题的上下文中最值得注意的是响应项:

  readonly attribute unsigned short status; readonly attribute DOMString statusText; DOMString getResponseHeader(DOMString header); DOMString getAllResponseHeaders(); readonly attribute DOMString responseText; readonly attribute Document responseXML; 

您应该能够使用getResponseHeader()方法获取任意头。

对于jQuery,您可以尝试:

 complete: function(transport, textstatus){ alert(transport.getResponseHeader("Status")) } 

警告:未经测试