2012-06-15 22 views
1

我有一个链接,它侦听,并点击该链接时被触发的功能。重定向在新标签页时,href是不知道之前

问题是链接是未知的提前。因此,在这个函数中,服务器会发出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异步:假的,但仍然没有工作,我不舒服锁定浏览器。

最后,我试图抑制默认行为,然后打开一个新的窗口(但我无法打开使用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

你可能会改写你的问题吗?因为这个问题(最后一句/段落)似乎与你所说的其余部分没有关系,所以很难理解你想要什么。要在新标签中打开链接,请尝试使用''标签内的属性'target =“_ blank”'。 – 2012-06-15 02:10:08

+0

你能更具体一些,也许换个问题吗?我相信我没有正确地遵循它。 – Ryan

回答

0

你也可以做到这一点的服务器端 - 用户发送到一个已知的URL,然后将它们导向它(HTTP 303),以正确的URL。

+0

这是我一开始就选择的解决方案。 – omarshammas

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 

    }); 
}); 

看来,设置已被弃用,我不知道是什么替代应该是,但现在它的工作原理。

+0

我尝试了这个问题的描述,但它没有奏效。 – omarshammas

0

理想的解决方案是使这一过程分两步进行。我添加了一个按钮,点击时会执行一个ajax请求,获得所需的链接,然后使用一些JavaScript会在新标签中显示带有所需目标的新链接。