我有一个链接和一个在单击该链接时侦听并被触发的函数。
问题是提前链接未知。因此,在此函数中,向服务器发出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函数?
答案 0 :(得分:0)
你可以简单地让你的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
});
});
看来设置已被弃用,我不确定应该采用什么替代方案,但现在它可以正常工作。
答案 1 :(得分:0)
您也可以在服务器端执行此操作 - 将用户发送到已知URL,然后将其重定向(HTTP 303)到正确的URL。
答案 2 :(得分:0)
理想的解决方案是将其分为两个步骤。我添加了一个按钮,当点击它会执行ajax请求,获得所需的链接,然后使用一些javascript将在新标签中显示与所需目的地的新链接。