Синхронный JQuery.post () - PullRequest
8 голосов
/ 05 июня 2011

Я пишу небольшой скрипт, который делает отдельные вызовы AJAX через цикл, и я столкнулся с, скорее всего, очевидной проблемой.Кажется, что цикл собирается быстро обработать данные, полученные с помощью ajax, в результате чего он загружает только последний фрагмент данных в цикле.Я добавил окно оповещения, которое проходит через итерации и прекрасно загружает данные, но это не будет практичным в пользовательской среде.Код - это просто jquery .post () с обратным вызовом внутри цикла for.Я могу опубликовать код по запросу, но я чувствую, что это можно прояснить в устной форме.Кто-нибудь знает обходной путь или лучший подход к последовательной загрузке данных?

EDIT

Изменяет ли .ajaxSetup() .post()?Возможно, я могу использовать это, чтобы изменить асинхронное значение для .post () ..

Ответы [ 4 ]

5 голосов
/ 05 июня 2011

Вам нужно сделать так, чтобы ваш вызов ajax был синхронным, мой друг;)

http://api.jquery.com/jQuery.ajax/

ex:

asyncBoolean По умолчанию: true

По умолчанию все запросы отправляются асинхронно (т.е. по умолчанию установлено значение true) .Если вам нужны синхронные запросы, установите для этой опции значение false .Междоменные запросы и dataType: запросы «jsonp» не поддерживают синхронную работу.Обратите внимание, что синхронные запросы могут временно блокировать браузер, отключая любые действия, когда запрос активен.

4 голосов
/ 05 июня 2011

На самом деле я обнаружил, что добавление этого фрагмента работало, поэтому мне не пришлось менять свой .post () на .ajax ()

$.ajaxSetup({ async: false });

Я не уверен, что он также изменит настройки других моих вызовов ajax, хотя

0 голосов
/ 13 декабря 2014
function myFunction() {
    var x;
for(var i=0;i<10;i++){
    if (confirm("Press a button!") == true) {
        x = "You pressed OK!";
    } else {
        x = "You pressed Cancel!";
    }
    document.getElementById("demo").innerHTML = x;
}
}

    enter code here
0 голосов
/ 05 июня 2011

Если вы используете async: false, вы сможете помещать каждый из ваших вызовов ajax в очередь, пока они не будут выполнены синхронным методом.Вот так:

 for( var i=0;i < x;i++ ){
     $.ajax({url: 'myurl',
             async: false,
             success: function(data){
                        //do something with the returned 'data'
                      };
    });
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...