当先前未知href时,在新选项卡中重定向

时间:2012-06-15 02:07:23

标签: javascript jquery

我有一个链接和一个在单击该链接时侦听并被触发的函数。

问题是提前链接未知。因此,在此函数中,向服务器发出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函数?

3 个答案:

答案 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将在新标签中显示与所需目的地的新链接。