1

我有一个链接和一个函数,当该链接被点击时,它会监听并触发。

问题是链接事先是未知的。因此,在此函数中,向服务器发出 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 是异步的,因此用户将首先被重定向到 unknown。然后,当收到响应时,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 函数?

4

3 回答 3

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

  });
});

似乎该设置已被弃用,我不确定替代方案应该是什么,但现在它可以工作。

于 2012-06-15T21:10:36.577 回答
0

您也可以在服务器端执行此操作 - 将用户发送到已知 URL,然后将他们(HTTP 303)重定向到正确的 URL。

于 2012-06-15T21:16:57.387 回答
0

The ideal solution was making this a two step process. I added a button, when clicked would perform an ajax request, get the desired link, then using some javascript would present new links with the desired destination in a new tab.

于 2012-06-19T00:02:09.693 回答