Всплывающие блокаторы обычно только позволяют window.open, если они используются во время обработки пользовательского события (например, щелчок). В вашем случае вы вызываете window.open позже, а не во время события, потому что $ .getJSON является асинхронным.
У вас есть два варианта:
что-то еще, а не window.open. Сделать синхронный вызов ajax, что вы обычно должны избегать, как чума, поскольку она блокирует пользовательский интерфейс браузера. $ .getJSON эквивалентно:
$.ajax({
url: url,
dataType: 'json',
data: data,
success: callback
});
... и поэтому вы можете сделать свой $ .getJSON вызов синхронным путем сопоставления ваших Params к выше и добавление асинхронном: ложному:
$.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);
}
}
});
Опять же, Я не сторонник синхронных вызовов 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");
}
});
});
});
Спасибо за помощь @Jasim. Изучит больше о аякс асинхронном и синхронном – Amran