AJAX задерживает выполнение следующих строк - PullRequest
0 голосов
/ 05 июля 2018

Учитывая следующий код, может ли кто-нибудь помочь мне понять, почему первое предупреждение выполняется после второго? Я полагаю, что это происходит потому, что ajax имеет небольшую задержку, пока не получит данные, исправьте меня, если я ошибаюсь. Заранее спасибо.

Javascript код:

window.onload = function() {
arry = new Array();
jQuery.ajax({    
    type: "GET",
    url: "index.php?op=17&id=@@postID@@&action=fetch",   
    dataType: "text",
    success: function(response){    
        var e = response;
        console.log(JSON.parse(e));
        arry = JSON.parse(e)
        alert(e); //1st alert
    }
}); 
alert("test") //2nd alert
}

Ответы [ 2 ]

0 голосов
/ 05 июля 2018

Ваш первый массив находится внутри события успеха вызова AJAX, который (функция успеха) регистрируется, пропускается и вызывается только тогда, когда ответ на вызов ajax готов ..

0 голосов
/ 05 июля 2018

Первый «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() для текста ответа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...