Сделайте вызов ajax синхронным, чего обычно следует избегать, например чумы, так как он блокирует пользовательский интерфейсбраузер.$.getJSON
эквивалентно:
$.ajax({
url: url,
dataType: 'json',
data: data,
success: callback
});
... и, таким образом, вы можете сделать ваш $.getJSON
синхронный вызов, сопоставив свои параметры с приведенным выше и добавив async: false
:
$.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");
}
});
});
});