我正在尝试此代码,但它给了我一个DOM异常。我希望它使用普通的Javascript从函数中获得真/假“答案”。
var url = 'http://www.google.com/';
function UrlExists(url)
{
var http = new XMLHttpRequest();
http.open('HEAD', url, false);
http.send();
return http.status!=404;
}
UrlExists(url);
我从 this SO答案中得到了这段代码,但正如我说的那样我无法正常工作......
答案 0 :(得分:1)
不检测 404 错误,但可以通过 setTimeout()
hack 检查页面是否存在。
// Based on https://stackoverflow.com/a/18552771
// @author Irvin Dominin <https://stackoverflow.com/u/975520>
function UrlExists(url)
{
var iframe = document.createElement('iframe');
var iframeError; // Store the iframe timeout
iframe.onload = function () {
console.log("Success on " + url);
clearTimeout(iframeError);
}
iframeError = setTimeout(function () {
console.log("Error on " + url)
}, 3000);
iframe.src = url;
document.getElementsByTagName("body")[0].appendChild(iframe);
}
UrlExists('http://www.google.com/');
UrlExists('http://www.goo000gle.com');
答案 1 :(得分:0)
跨域不提供任何状态代码。当服务器以是或否响应时,状态代码是从服务器接收的内容的一部分。如果跨域服务器永远不响应请求。
代码中的第二个错误是您无法在没有任何等待时间或成功事件的情况下直接捕获状态代码。函数中的return语句不会等到服务器响应ajax请求,所以你不能依赖它。
答案 2 :(得分:0)
由于JavaScript中的“相同来源策略”,您无法从其他URL调用服务。这里提供一些解决方法:
Ways to circumvent the same-origin policy
最简单的方法是使用“ iframe”。通过使用目标网址打开iframe,您可以向该网址发出http请求。
答案 3 :(得分:0)
我看到了你的小提琴,它包含 2 个问题:
通过将最后一个属性设置为 true
http.open('GET', url, true);
您可以在此处阅读文档XMLHttpRequest Parameters
还要检查一下:DOM Exception-failed-to-execute-send-on-xmlhttprequest-on-chrome-only