Javascript DoEvents эквивалент? - PullRequest
2 голосов
/ 16 июля 2009

Вот мой сокращенный фрагмент кода:

$(document).ready(function() {
$.get("/Handlers/SearchData.ashx",
function(data) {
json = $.evalJSON(data);
});

//do some other stuff

//use json data

alert(json == null);

});

Alert говорит, что истина, потому что evalJson еще не завершил обработку данных JSON (21kb gzipped). Мне нужно как-то подождать, пока все закончится, прежде чем использовать эти данные - именно то, что я буду делать с DoEvents в цикле while.

Ответы [ 4 ]

3 голосов
/ 16 июля 2009

Нет эквивалента DoEvents, но вы можете поместить код, который зависит от ваших данных JSON, в функцию и вызвать ее из обратного вызова AJAX. Вы также можете использовать метод $ .getJSON, чтобы вам не приходилось самостоятельно оценивать JSON.

$(document).ready(function() {
    $.getJSON("/Handlers/SearchData.ashx",
    function(data) {
        json = data;
        stuffToDoAfterIHaveData();
    });

    //do some other stuff
});

//use json data
function stuffToDoAfterIHaveData() {
    alert(json == null);
}

В качестве альтернативы, jQuery предлагает способ сделать синхронные запросы AJAX (то есть они останавливают выполнение кода до тех пор, пока ответ не возвращается). Вы можете использовать $.ajaxSetup({ async: false }); или напрямую вызывать метод $.ajax и передать async:false в объекте параметров.

3 голосов
/ 16 июля 2009

Вместо того, чтобы выполнять evalJSON самостоятельно, почему бы не позволить jQuery выяснить, когда это будет сделано:

$.ajax({
  url:"/Handlers/SearchData.ashx",
  type: "get",
  dataType: "json",
  success:function(d) {
    //d now contains a JSON object, not a string.
    alert(d==null);
  }
});
2 голосов
/ 04 февраля 2013

Вы можете использовать так:

$(document).ready(function(){
    json = $.parseJSON(
        $.ajax({url: '/Handlers/SearchData.ashx', async: false}).responseText
    )

    alert(json == null);
})
2 голосов
/ 16 ноября 2009

Единственное, что похоже на doEvents в javascript - это setTimeout (). Первый аргумент должен быть строкой с кодом, который вы хотите выполнить после «системных событий», а второй аргумент - это количество миллисекунд ожидания ... Это сложно, но это единственное решение, которое я знаю.

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