计算页面上断开链接的数量

时间:2019-07-12 10:00:23

标签: javascript ajax for-loop

我写了一个JavaScript来检测页面上断开的链接。如果有10个断开的链接,我只想计算断开的链接并只发出一次警报,而不是发出10次警报。如何调整代码以满足我的要求。

function doCheck(i,href) {
jQuery.ajax({
    url: href,
    method: "HEAD",
    statusCode: {
        404: function () {
          x ++;
          alert(x +'broken link found');
          anchors[i].style.border='2px dotted red';
        },
        200: function() {
          anchors[i].style.border='2px dotted green';
    }
    }
});
}


var anchors = document.getElementsByTagName("a");
var x = 0;
for (var i=0; i<anchors.length; i++) {
var href = anchors[i].getAttribute('href');
doCheck(i,href);
}

3 个答案:

答案 0 :(得分:1)

计算已完成的请求数,如果已完成的请求数等于已发送的请求数,则说明所有锚已处理完毕,您可以发出警报

var anchors = document.getElementsByTagName("a");
var x = 0; var y = 0;
for (var i = 0; i < anchors.length; i++) {
    var href = anchors[i].getAttribute('href');
    doCheck(i,href);
}

function doCheck(i,href) {
  jQuery.ajax({
    url: href,
    method: "HEAD",
    statusCode: {
      404: function () {
        x++;
        anchors[i].style.border='2px dotted red';
      },
      200: function() {
        anchors[i].style.border='2px dotted green';
      }
    }
  }).complete(function () {
    if (y++ === anchors.length) {
      alert(x +'broken link found');
    }
  });
}

答案 1 :(得分:1)

基于AvcS响应。

您需要使用全局变量来保存断开链接的计数,并且当您的代码中发现任何404增大此全局变量时,在循环之后,您可以显示带有警报的计数器或将该值放入字段中

答案 2 :(得分:1)

这将满足您的要求。让您的x计数器计数,以及当循环位于最后一个锚点上时;然后它会警告链接断开的数量。

var anchors = document.getElementsByTagName("a");
var x = 0;
for (var i=0; i<anchors.length; i++) {
var href = anchors[i].getAttribute('href');
doCheck(i,href);
If ( i === anchors.length - 1  ) { 
alert(x +' broken link found');
}
}

function doCheck(i,href) {
jQuery.ajax({
url: href,
method: "HEAD",
statusCode: {
    404: function () {
      x ++;
      anchors[i].style.border='2px dotted red';
    },
    200: function() {
      anchors[i].style.border='2px dotted green';
     }
} 
});
}