14

我正在尝试这段代码,但它给了我一个 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);

小提琴

我从这个SO 答案中得到了这个代码,但正如我所说我无法让它工作......

4

4 回答 4

1

跨域不提供任何状态码。状态码是服务器响应是或否时从服务器接收到的内容的一部分。在跨域服务器的情况下永远不会响应请求。

代码中的第二个错误是您无法在没有任何等待时间或成功事件的情况下直接捕获状态代码。函数中的 return 语句不会等到服务器响应 ajax 请求,所以你不能依赖它。

于 2016-12-26T13:19:42.597 回答
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');

于 2021-03-23T05:53:49.493 回答
0

由于 JavaScript 中的“同源策略”,您不能从不同的 URL 调用服务。此处介绍了一些解决方法:

规避同源政策的方法

最简单的方法是使用“iframe”。通过使用您的目标网址打开 iframe,您将能够向该网址发出 http 请求。

于 2020-11-09T12:26:46.313 回答
0

我看到了你的小提琴,它包含两个问题:

  1. DOM 异常
  2. CORS 政策
  • 您正在获取 DOM 异常,因为您正在进行同步调用。

通过将 last 属性设置为使调用同步true

http.open('GET', url, true);

您可以在此处阅读文档XMLHttpRequest 参数

还要检查一下:DOM Exception-failed-to-execute-send-on-xmlhttprequest-on-chrome-only

于 2021-03-23T05:38:47.090 回答