首页 > 解决方案 > 我们如何在控制台中记录通过/失败的 url 检查结果?

问题描述

我正在从 HTML 页面中获取所有 url 链接并调用一个函数来为所有 url 链接发送 XHR 请求。我想以适当的方式控制那些通过和失败的请求链接的日志。我在某种程度上得到了结果,但对控制台日志/错误的方式不满意。有人可以告诉我需要在哪里更正控制台日志吗?

<div id="WebLinks">
  <h2>All Links</h2>
  <a href="https://jsfiddle.net/">Link 1</a><br>
  <a href="https://stackoverflow.com/">Link 2</a><br>
  <a href="https://tellus.com">Link 3</a><br>
  <a href="https://loudop.com">Link 4</a><br>
  <a href="https://www.youtube.com">Link 5</a><br><br>
  <input type="button" id="linkChecker" onclick="linkCheck();" value="linkChecker">
</div>

// 如何改进控制台日志以显示通过和失败的日志。还删除了一些控制台错误;

var linkCheck = function() {
  var arr = [],
    l = document.links;
  for (var i = 0; i < l.length; i++) {
    arr.push(l[i].href);
    console.log(arr[i]);
    urlCheck(arr[i]);
  }

  function urlCheck(arr, callback) {
    var xhr = new XMLHttpRequest();
    xhr.onreadystatechange = function() {
      if (xhr.readyState === 4) {
        if (callback) {
          callback(xhr.status < 400);
        }
      }
    };
    xhr.open('HEAD', arr);
    xhr.send();
  }

  urlCheck(arr, function(exists) {
    console.log('"%s" exists?', arr, exists);
  });

}

JS小提琴

标签: javascriptxmlhttprequest

解决方案


您可以使用fetchAPI 使用mode: "no-cors"以下选项:

window.linkCheck = function() {
  function urlCheck(link) {
    fetch(link, {mode: "no-cors"}).then(
      () => console.log(`${link} is valid`),
      () => console.log(`${link} is invalid`)
    );
  }

  var arr = [],
    l = document.links;
  for (var i = 0; i < l.length; i++) {
    arr.push(l[i].href);
    urlCheck(arr[i]);
  }
};
<div id="WebLinks">
  <h2>All Links</h2>
  <a href="https://jsfiddle.net/">Link 1</a><br>
  <a href="https://stackoverflow.com/">Link 2</a><br>
  <a href="https://tellus.com">Link 3</a><br>
  <a href="https://loudop.com">Link 4</a><br>
  <a href="https://www.youtube.com">Link 5</a><br><br>
  <input type="button" id="linkChecker" onclick="linkCheck();" value="linkChecker">
</div>


推荐阅读