ポップアップブロッカーは、一般的にのみwindow.openできるようになります、私が作ったコードです。あなたの場合、$ .getJSONは非同期であるため、イベント中ではなく、後でwindow.openを呼び出すことになります。
するというよりも、window.open、何かを実行します。
2つのオプションがあります。 ajaxの呼び出しを同期させます。これは、ブラウザのUIをロックするので、通常はペストのように回避する必要があります。 、
再び
$.ajax({
url: "redirect/" + pageId,
async: false,
dataType: "json",
data: {},
success: function(status) {
if (status == null) {
alert("Error in verifying the status.");
} else if(!status) {
$("#agreement").dialog("open");
} else {
window.open(redirectionURL);
}
}
});
:$ .getJSONは同等です:
$.ajax({
url: url,
dataType: 'json',
data: data,
success: callback
});
...ので、あなたは上記と追加非同期にあなたのparamsをマッピングすることで、あなたの$ .getJSONコールの同期を行うことができます偽私はあなたの目標を達成するための他の方法を見つけることができる場合、同期ajax呼び出しを提唱しません。しかし、できなければ、そこに行く。 |
ライブ例:
はここであるため、非同期呼び出しのテストに失敗したコードの例ですライブソース(ライブリンクは、もはやためJSBinへの変更の仕事)
jQuery(function($) {
// This version doesn't work, because the window.open is
// not during the event processing
$("#theButton").click(function(e) {
e.preventDefault();
$.getJSON("http://jsbin.com/uriyip", function() {
window.open("http://jsbin.com/ubiqev");
});
});
});
そして、ここでは同期呼び出し使用して、作業を行う例を示します
ライブの例を|ライブソース(JSBinの変更によりライブリンクが機能しなくなりました)
jQuery(function($) {
// This version does work, because the window.open is
// during the event processing. But it uses a synchronous
// ajax call, locking up the browser UI while the call is
// in progress.
$("#theButton").click(function(e) {
e.preventDefault();
$.ajax({
url: "http://jsbin.com/uriyip",
async: false,
dataType: "json",
success: function() {
window.open("http://jsbin.com/ubiqev");
}
});
});
});
help @Jasimありがとうございます。非同期と非同期のajaxに関する詳細な調査 – Amran