我有一个网址,我想在FancyBox(或任何其他叠加式弹出窗口)中打开。我不知道URL是否好,所以我想测试一下。如果无效 - 我不会将fancyBox插件附加到该特定URL,它将只是一个常规链接。 如何在将插件附加到网址之前测试网址?尝试执行以下操作:
$("a.overlay").each(function() {
var xhr = $.get(this.href, function(data, status) {
// never executed in case of a failed request
});
if (xhr.status && xhr.status === 404)) {
// not good, do nothing
} else {
// can attach plugin here
}
});
问题是,xhr
并不总是被定义,因为JS不等待请求完成。同样,我不能使用回调函数,因为它似乎没有在请求失败的情况下执行(我可以在Firebug中看到它,但这不是很有用)。
谢谢大家周末愉快。
答案 0 :(得分:7)
你可以这样做,虽然我会质疑为每个链接提出请求是多么明智....
$("a.overlay").each(function() {
var $a = $(this);
$.ajax({
type: 'GET',
url: this.href,
success: function() {
// attach plugin here
},
error: function() {
// not good, log it
}
});
});
如果你不打算对页面的内容做任何事情,你可以用'HEAD'切换'GET'只获取所请求页面的标题,这会更快,让你知道你想要什么
答案 1 :(得分:1)
Paolo为您提供了所要求的答案 - 但每次客户都要检查链接的质量对我来说似乎很浪费。它不仅浪费了目标的带宽,而且浪费了客户的时间。
这是可以而且应该在服务器端进行一次(可能是每天)的事情。从那里你应该生成适当的html / js。从工程的角度来看,这对我来说似乎是一种更明智的方法。
我不知道你正在使用什么样的服务器端框架,如果有的话,但我使用的任何一个都有相当简单的内置http客户端,以及chronjob /预定的工作设施。
或者,您可以创建页面,以便当天的第一个请求进行检查,并将结果缓存到磁盘(或内存)以备将来的全天请求。第一次加载可能会有点慢。
答案 2 :(得分:0)
查看您的问题The problem is, xhr will not always be defined because JS doesn't wait for the request to complete.
,可以通过创建
$().ajax({args});
使用async: false
拨打电话。
检查http://api.jquery.com/jQuery.ajax/上的参数async
以获取更多详细信息。
答案 3 :(得分:0)
我知道这已经很老了,但仍然会添加它以防有人遇到并想要更多选择。看一下这个插件:http://www.webmonkey.com/2010/07/beautify-broken-links-with-catch404/
来自webmonkey的说明:
但现在我们有Addy的Catch404 Osmani,一个处理的jQuery插件 破碎的风格链接。部署 Catch404在您的网站上,而不是 看到报告链接断开的页面, 向用户呈现Ajax 模态窗口(也称为跳跃,或 一个灯箱)通知他们链接 页面不存在。窗户也 提供一些替代目的地 他们可能想看看。