我有一个链接和一个函数,当单击该链接时,它会侦听并触发。
问题是链接事先未知。因此,在此函数中,向服务器发出 ajax 请求以检索它。有一个严格的要求,链接只能在用户请求时才生成,并且不能事先生成。
然后,如何将新选项卡中的用户重定向到该链接?
改写
所以假设我有
<a href="unknown" target="_blank">My Link</a>
还有一个在单击时触发的事件处理程序。
我尝试了几种不同的方法。第一次
$('a[href="unknown"]').click(function(ev) {
$.ajax({
type: "GET",
url: "/get_link",
context: document.body
}).done(function(response) {
link = response.link
//substitute href of a to the new link
});
});
意识到这不起作用,因为 ajax 是异步的,因此用户将首先被重定向到未知。然后,当收到响应时,href 将被替换为正确的链接。
所以后来我尝试制作 ajax async:false,但这仍然不起作用,我不习惯锁定浏览器。
最后,我尝试抑制默认行为,然后打开一个新窗口(但我无法使用jquery打开新选项卡)。
$('a[href="unknown"]').click(function(ev) {
ev.preventDefault();
$.ajax({
type: "GET",
url: "/get_link",
context: document.body
}).done(function(response) {
link = response.link
//substitute href of a to the new link
window.open(link)
});
});
显然,在谷歌搜索之后,您无法在jquery中打开新选项卡,因为它基于用户的浏览器设置。
然后,当用户单击链接(预先未知)时,如何在新选项卡中重定向用户,该链接会触发使用 ajax 请求检索链接的 javascript 函数?
您也可以在服务器端执行此操作 - 将用户发送到已知 URL,然后将他们 (HTTP 303) 重定向到正确的 URL。
你可以简单地使你的ajax同步:
$('a[href="unknown"]').click(function(ev) {
$.ajax({
type: "GET",
url: "/get_link",
context: document.body,
async: false
}).done(function(response) {
link = response.link
//substitute href of a to the new link
});
});
似乎该设置已被弃用,我不确定替代方案应该是什么,但现在它可以工作。
理想的解决方案是使这个过程分为两步。我添加了一个按钮,单击时将执行ajax请求,获取所需的链接,然后使用一些javascript将在新选项卡中显示具有所需目标的新链接。