如果URL链接返回错误,禁用HTML链接

7

我有一个按钮,链接到另一个页面。在点击该链接之前,我想检查该页面是否返回错误或者不存在。我应该怎么编码呢?这种做法可行吗?如果不存在或者返回错误,我想禁用该链接。

4个回答

3
您可以使用Ajax加载页面,然后解析它以查看是否存在错误,然后再将用户重定向。我还建议为用户添加一些说明,以便说明链接无法工作的原因。

怎么做?你能给我一个例子吗?非常感谢。谢谢。 - newbie
@新手 在文档中有示例。http://api.jquery.com/jQuery.ajax/ - Kevin B
不完全符合您的要求,但可能是一个开始!https://dev59.com/oHE95IYBdhLWcg3wCJNf - ablm
根据jQuery.ajax API,“大多数”Ajax请求都受到同源策略的限制;请求无法成功地从不同的域、子域或协议中检索数据。但是,脚本和JSONP请求不受同源策略的限制。在这里,问题只是页面是否存在或返回错误(success属性)。 - Robin Manoli

3
请注意,我会在服务器端执行此操作。但由于您的标签与 jQuery 相关,因此我会提供一个使用 jQuery 可以尝试的解决方案。
使用 jQuery,您可以:
var link = $('#id_of_your_a_element');
$.ajax(
    url: link.attr('href'),
    error: function() { 
        link.hide();
    }
);

编辑

正如ribot所指出的那样,这个例子只是隐藏了链接。如果你想禁用它,可以在用户点击链接时阻止默认行为:

link.click(function(e) {
    e.preventDefault();
});

或者直接删除 href 属性:

link.removeAttr('href');

实际上,这里的链接是隐藏的,而不是被禁用的。 - Robin Manoli

2

是我哈哈。看到 OP 用 JS 或 jQuery 提问时,我就删掉了评论。 - Savas Vedova
仍然非常相关,因为大多数被接受的解决方案将使用服务器端语言,以便您可以实际访问另一个域。 - Gromer

1
每次点击都使用Ajax请求,即使是HEAD请求(这通常是测试URL存在性的首选HTTP动词),这个想法让我感到非常糟糕,即使你能够克服可能不可逾越的跨域问题(除非你涉及某种由Ajax调用的服务器端检查)。现在,我想你可能能够将响应保存在某个地方,以便链接不会被重新检查(在客户端或服务器端),但这仍然让我觉得这是一个非常复杂的解决方案,而这个问题通常并不需要解决。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接