Первый «A» в AJAX означает асинхронный. Это означает, что он не блокируется в вашем коде, поэтому alert('test')
вызывается сразу после вашего AJAX-запроса, тогда как alert(e)
вызывается только после того, как AJAX-запрос получил успешный ответ от сервера.
Упоминаемая вами «небольшая задержка» - это не так, а время, необходимое серверу для выполнения любого кода и возврата ответа.
Если вам абсолютно необходимо, чтобы запрос обрабатывался синхронно, вы можете передать свойство async
в вызов AJAX следующим образом:
window.onload = function() {
var arry = [ ];
jQuery.ajax({
type: "GET",
url: "index.php?op=17&id=@@postID@@&action=fetch",
dataType: "json",
async: false
}).done(function(response) {
arry = response
alert(response); //1st alert
});
alert("test") //2nd alert
}
Обратите внимание, что я несколько обновил код, чтобы использовать обещание done()
. Кроме того, указание dataType: "json"
исключает необходимость вызова JSON.parse()
для текста ответа.