jquery - 为什么 jQuery 死链接删除代码会删除所有链接?

标签 jquery

此代码检查死链接。由于浏览器不允许第 3 方 Ajax 请求,因此我创建了一个 php 文件来检查死链接,我的 native jQuery 代码是:

function UrlExists(urlx) {
    $.ajax({
        url: "/chk.php?url=" + encodeURIComponent(urlx),
        cache: false,
        method: 'get',
        success: function (data) {
            if (data.indexOf("T") != -1) {
                return true;
            }
            else {
                return false;
            }
        }
    });
}
$(document).ready(function () {
    $("table[id^='row']").each(function () {
        if (!UrlExists($(this).find("a[href$='mp3']").attr('href'))) {
            $(this).remove();
        }
    })
});

同时,我已经确定

1) chk.php 工作正常,在某些 URL 上返回 T,而在其他 URL 上则返回 T

2) 旧的 JS 代码没有被使用

问题仍然是上面的程序删除了所有链接。我还尝试将 async 设置为 false,但没有帮助。

最佳答案

成功回调由 jQuery 调用,并消耗返回值。代码中的 UrlExists 始终返回未定义的值,该值被视为 false。尝试如下所示:

function urlExists(url, callback)
{
    $.ajax({
        url: "/chk.php?url="+encodeURIComponent(url),
        cache: false,
        method: 'get',
        success: function(data){
            if (data.indexOf("T") != -1){
                callback(true);
            } else {
                callback(false);
            }
        }
    });
}


$(document).ready(function() {
    $("table[id^='row']").each(function() {
        var url = $(this).find("a[href$='mp3']").attr('href');
        var self = this;
        urlExists(url, function (exists) {
            if (! exists) {
                $(self).remove();
            }
        });
    });
});

或者您可以使用其他答案中描述的同步方法编写 urlExists,但是它会使 javascript 引擎在每次获取期间阻塞,而且由于多个请求不能同时发生,因此速度较慢。

关于jquery - 为什么 jQuery 死链接删除代码会删除所有链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11188278/

相关文章:

jquery隐藏li的父ul中的ul元素

javascript - jQuery 代码性能改进

javascript - 通过 ajax 发送同名多个复选框值

javascript - 如何通过jQuery获取动态表中的行索引

javascript - Jquery全局点击并提交拦截不起作用

javascript - 如何在 jQuery 中选择一些元素作为选择器?

jquery - 将 "$"(美元符号)替换为 "JQuery"

javascript - 将数据发布到 JsonP

javascript - 通过 AJAX onclick 传递数据

javascript - 获得焦点时选择文本框的所有内容