检查Javascript中的URL是否已损坏

Tri*_*rip 18 javascript jquery http

这个问题之前已经发布在Stack上,但没有一个具体到我想要了解的内容.

检查URL是否正确以发送http Head请求的最简单方法.但是如何使用它来指定URL?

我在上一篇文章中发现了这个:

function UrlExists(url) {
  var http = new XMLHttpRequest();
  http.open('HEAD', url, false);
  http.send();
  return http.status!=404;
}
Run Code Online (Sandbox Code Playgroud)

但由于一些原因,它似乎没有在萤火虫中运行.

我提前道歉是为了愚蠢.

jAn*_*ndy 36

我建议使用jQuery来获得正确的跨浏览器ajax请求:

function UrlExists(url, cb){
    jQuery.ajax({
        url:      url,
        dataType: 'text',
        type:     'GET',
        complete:  function(xhr){
            if(typeof cb === 'function')
               cb.apply(this, [xhr.status]);
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

用法:

UrlExists('/path/script.pl', function(status){
    if(status === 200){
       // file was found
    }
    else if(status === 404){
       // 404 not found
    }
});
Run Code Online (Sandbox Code Playgroud)

  • +1,但您不想检查200和404以外的状态代码吗?它可以是500或304等 (5认同)
  • 这种方法仍然有用吗?我在firebug中获得状态200,但jQ状态为0并报告Cross Origin请求错误(我的URL实际上在另一个域上...但它是我感兴趣的200状态,而不是任何HTML) (4认同)

ins*_*ign 5

现代、跨界和捷径

checkLink = async url => (await fetch(url)).ok
Run Code Online (Sandbox Code Playgroud)

这与以下内容相同:

async checkLink(url) { return (await fetch(url)).ok }
Run Code Online (Sandbox Code Playgroud)

这与以下内容相同:

async function checkLink(url) { return (await fetch(url)).ok }
Run Code Online (Sandbox Code Playgroud)

这与以下内容相同:

注意:从 Gecko 30.0 (Firefox 30.0 / Thunderbird 30.0 / SeaMonkey 2.27)、Blink 39.0 和 Edge 13 开始,主线程上的同步请求已被弃用,因为它们对用户体验有负面影响。

交叉解决方案(旧的,已弃用)

function UrlExists(url) {
 var http = new XMLHttpRequest();
 http.open('HEAD', url, false);
 http.send();
 return http.status==200;
}
Run Code Online (Sandbox Code Playgroud)