Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 获取浏览器控制台中显示的XMLHttpRequest连接状态_Javascript_Html_Xmlhttprequest - Fatal编程技术网

Javascript 获取浏览器控制台中显示的XMLHttpRequest连接状态

Javascript 获取浏览器控制台中显示的XMLHttpRequest连接状态,javascript,html,xmlhttprequest,Javascript,Html,Xmlhttprequest,我想检查是否可以通过XMLHttpRequest访问网站。 我编写了一个JS函数:UrlExsists(url);尝试建立连接 function UrlExists(url) { var http = new XMLHttpRequest(); http.open('HEAD', url, false); http.send(); if (http.status != 404) { console.log("did work:" + url)

我想检查是否可以通过XMLHttpRequest访问网站。 我编写了一个JS函数:
UrlExsists(url)
;尝试建立连接

function UrlExists(url) {
    var http = new XMLHttpRequest();
    http.open('HEAD', url, false);
    http.send();

    if (http.status != 404) {
        console.log("did work:" + url)
    } else {
        console.log("did not work:" + url)
    }
};
当我转到浏览器控制台并像这样调用函数时:
urlexists(“https://www.google.com/");,控制台中显示以下内容:

“XHR头[HTTP/2.0 200 OK 668ms]”

但由于“跨源请求被阻止”而失败,并发生网络错误。=>

如果我调用
urlexists(“https://www.google.com/test");将显示以下内容:

“XHR头[HTTP/2.0 404未找到0毫秒]”

再次出现“跨源请求被阻止”和网络错误。=>

现在这些状态码404和200正是我想要的,但是我如何在javascript中获得它们,以确定给定的网站是否可用


如果我走错了路,有人能给我点对的吗?

由于CORS错误,这是不可能的(如果没有启用跨源资源共享,您无权加载其他站点的脚本:)。您无法获取信息,甚至无法获取HTTP响应代码

我看到的唯一解决方法是向DOM追加css请求。并检查css是否成功加载。但这不是一个通用的解决方案,您需要选择一些css类并检查它是否已加载。此外,还需要使用HTML元标记禁用缓存

您还可以动态附加css链接标记(说明:)

经过一些延迟(如3-5秒超时),您将检查css是否已成功加载:

function verifyStyle(selector) {
    var rules;
    var haveRule = false;

    if (typeof document.styleSheets != "undefined") {   //is this supported
        var cssSheets = document.styleSheets;

        outerloop:
        for (var i = 0; i < cssSheets.length; i++) {

             //using IE or FireFox/Standards Compliant
            rules =  (typeof cssSheets[i].cssRules != "undefined") ? cssSheets[i].cssRules : cssSheets[i].rules;

             for (var j = 0; j < rules.length; j++) {
                 if (rules[j].selectorText == selector) {
                         haveRule = true;
                        break outerloop;
                 }
            }//innerloop

        }//outer loop
    }//endif

    return haveRule;
}//eof

var ok = verifyStyle(".url-exists");
函数验证样式(选择器){
var规则;
var-haveRule=false;
如果(typeof document.styleSheets!=“undefined”){//是否支持此操作
var cssSheets=document.styleSheets;
外部环路:
对于(变量i=0;i

如果变量ok为true,那么给定的url()是可访问的。

我想,我找到了解决问题的方法。 fetchapi似乎正是我想要的。

我按照Kaido的回答做了:


:“浏览器在出现XMLHttpRequest错误时也会报告状态为0。”-因此,如果出现CORS错误,您将无法获得此信息。感谢您的回答,我不知道您可以这样做。我肯定会进一步研究这个问题,不过我找到了解决问题的办法。fetchapi似乎起到了作用。
.url-exists {
}
function verifyStyle(selector) {
    var rules;
    var haveRule = false;

    if (typeof document.styleSheets != "undefined") {   //is this supported
        var cssSheets = document.styleSheets;

        outerloop:
        for (var i = 0; i < cssSheets.length; i++) {

             //using IE or FireFox/Standards Compliant
            rules =  (typeof cssSheets[i].cssRules != "undefined") ? cssSheets[i].cssRules : cssSheets[i].rules;

             for (var j = 0; j < rules.length; j++) {
                 if (rules[j].selectorText == selector) {
                         haveRule = true;
                        break outerloop;
                 }
            }//innerloop

        }//outer loop
    }//endif

    return haveRule;
}//eof

var ok = verifyStyle(".url-exists");