url = "http://example.com"
new Ajax.Request(url, {
onComplete: function(transport) {
alert(transport.status);
}
});
我希望如果网站正常工作则返回200状态,如果不工作则返回500等等。但是该代码一直返回0。
最终,我希望有一个setinterval函数,定期ping网站的正常运行时间状态。
答案 0 :(得分:7)
使用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状态代码。
希望这有帮助
答案 1 :(得分:4)
Ajax库本身并不“返回状态代码”;该代码是服务器响应中返回的HTTP响应代码。状态代码200表示成功; 404表示“未找到”,等等。
响应代码0很可能意味着甚至没有尝试过请求。请求URL是否与页面来源相同的域(子域,如果适用)?如果没有,那么您可能会遇到同源策略的问题,这会阻止脚本创建任意请求。
要解决此问题,您需要在服务器端代理数据;例如,使用脚本/框架处理程序/执行Web请求的任何内容,并将数据传递回客户端。调用“本地”代理而不是远程数据源。
答案 2 :(得分:2)
Prototype有onXYZ callbacks,例如:
new Ajax.Request(url, {
method: 'get',
on500: function(transport) {
alert("failed!");
},
onSuccess: function(transport) {
alert("success!");
}
});
但是,如果网站已关闭(如同,无法访问),则不会返回500错误,因此您的方法对初学者来说不是很好。
答案 3 :(得分:2)
通过创建服务器端代理文件来传递状态代码,我能够使远程域工作。我使用code on this post创建了一个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的状态代码。
答案 4 :(得分:1)
知道示例中的 transport 参数是XMLHttpRequest对象可能会有所帮助。可在此处找到此对象提供的方法和属性的完整详细信息:
http://www.w3.org/TR/XMLHttpRequest/#the-xmlhttprequest-interface
在这个问题的上下文中最值得注意的是response项:
readonly attribute unsigned short status;
readonly attribute DOMString statusText;
DOMString getResponseHeader(DOMString header);
DOMString getAllResponseHeaders();
readonly attribute DOMString responseText;
readonly attribute Document responseXML;
答案 5 :(得分:0)
你应该能够使用getResponseHeader()方法获得任意头。
对于jQuery,您可以尝试:
complete: function(transport, textstatus){
alert(transport.getResponseHeader("Status"))
}
警告:未经过测试