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")) }
警告:未经测试