url = "http://example.com"
new Ajax.Request(url, {
onComplete: function(transport) {
alert(transport.status);
}
});
如果站点正在运行,我希望它返回 200 的状态,或者如果它不运行,则返回 500 等。但是该代码一直返回 0。
最终,我想要一个 setinterval 函数,它会定期 ping 一个网站以了解正常运行时间状态。
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 请求并将数据向下传递给客户端的程序。调用“本地”代理而不是远程数据源。
原型有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"))
}
警告:未测试