2011-03-15 86 views
2

我在jQuery中有一个ajax函数,我希望完整的函数可以在新窗口或选项卡中打开一个url。window.open打开弹出框而不是新窗口

<a href="#" onclick="Add('1','http://www.google.com');return false;">Link</a> 

和:

function Add(ID, url) 
{ 
    var data = "{'ID' : '" + ID + "'}"; 
    $.ajax({ 
     type: "POST", 
     url: "Function.ashx/Add", 
     data: data, 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     complete: function() 
     { 
      window.open(url); 
     } 
    }); 
} 

window.open函数工作为上,但我想打开一个新窗口的链接。 w3School Example工程知识。 但我的浏览器检测到它是一个弹出窗口并将其阻止。
我的代码有什么问题?

+0

我不认为这是可能的编程方式打开一个新的窗口,而不会触发弹出阻滞剂。 – 2011-03-15 06:37:55

+0

@Pekka:如果你看看w3的例子,它打开窗口不弹出。 – Raika 2011-03-15 06:38:39

+0

mmmm,我*认为*这是因为它是一个手动点击触发它,而您的Ajax回调则不是这种情况。但很好的问题,有兴趣看看会发生什么。 – 2011-03-15 06:40:35

回答

1

你为什么要等到AJAX调用完成才能加载URL?

为什么不直接触发AJAX调用并直接打开新窗口。

例子:

<a href="#" onclick="Add('1','http://www.google.com');return false;">Link</a> 

 

function Add(ID, url) 
{ 
    var data = "{'ID' : '" + ID + "'}"; 
    $.ajax({ 
     type: "POST", 
     url: "Function.ashx/Add", 
     data: data, 
     contentType: "application/json; charset=utf-8", 
     dataType: "json" 
    }); 

    window.open(url); 
} 
+0

beacuse它的触发器,我的ajax不会在Function.ashx中调用我的Add函数。你能写一个样本吗? – Raika 2011-03-15 07:00:55

+0

我的代码和你的代码有什么不同?是工作。 – Raika 2011-03-16 05:03:04

+0

这是因为在你的代码中,window.open()调用不是通过点击启动的。它由AJAX回调启动。在我的代码中,没有AJAX回调,在调用AJAX后立即调用window.open(),直接在由用户点击启动的Add()函数中,因此浏览器允许它打开一个窗口。 – Stephen 2011-03-16 07:29:42

0

我猜大概w3cschool.com得到弹出previlige为是授权的辅导网站。 AFAIK,任何在没有直接用户交互(例如点击)的情况下打开额外窗口的方式都被视为“弹出式窗口”,并且会被启用弹出窗口阻止程序的大多数浏览器阻止。你最好的选择可能是打开后点击该链接并注入任何你想要的AJAX完成后:

<a href="http://www.google.com" onclick="Add('1')">Link</a> 

function Add(ID, url) 
{ 
    var newWindow = window.open(url); 
    var data = "{'ID' : '" + ID + "'}"; 
    $.ajax({ 
     type: "POST", 
     url: "Function.ashx/Add", 
     data: data, 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     complete: function (data) 
     { 
      // do whatever you want with newWindow 
     } 
    }); 
} 
相关问题