我写了一个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);
}
答案 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';
}
}
});
}