Jquery ajaxStart does не инициирован

Этот код

$("#loading").ajaxStart(function() {
        alert("start");
        $(this).show();
    });

в моей разметке

<div style="text-align:center;"><img id="loading" src="../images/common/loading.gif" alt="" /></div>

Вот полный запрос ajax:

$.ajax({
        type: "POST",       

        url: "http://localhost/WebServices/Service.asmx/GetResults",

        data: jsonText,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(response) {

            var results = (typeof response.d) == 'string' ? eval('(' + response.d + ')') : response.d;
            PopulateTree(results);
        },

        error: function(xhr, status, error) {
            var msg = JSON.parse(xhr.responseText);
            alert(msg.Message);


        }
    });

$("#loading").ajaxStart(function() {
        alert("start");
        $(this).show();
    });

    $("#loading").ajaxStop(function() {
        alert("stop");
        $(this).hide();
        $("#st-tree-container").show();

    });

никогда не запускает аварийный "запуск" даже при том, что gif, как показывают, вращается. AjaxStop инициирован как ожидалось. Какие-либо идеи, почему?

14
задан Sumurai8 26 June 2015 в 15:24
поделиться

2 ответа

Он не срабатывает, потому что ваш обработчик для .ajaxStart() не зарегистрирован до после того, как ajax запрос уже идет (после того, как он был бы вызван). .ajaxStop() регистрируется также после, но до завершения запроса, поэтому, когда он возвращается, он подключается для выполнения.

Чтобы исправить это, переместите это до вашего первого $.ajax() вызова:

$("#loading").ajaxStart(function() {
  $(this).show();
}).ajaxStop(function() {
  $(this).hide();
  $("#st-tree-container").show();
});


UPDATE: Начиная с jQuery 1.9, события AJAX должны быть прикреплены только к документу. http://jquery.com/upgrade-guide/1.9/#ajax-events-should-be-attached-to-document

$(document).ajaxStart(function() {
  $("#loading").show();
});

$(document).ajaxStop(function() {
  $("#loading").hide();
  $("#st-tree-container").show();
});
47
ответ дан 1 December 2019 в 06:21
поделиться

Я не уверен, это решит вашу проблему, но обычно я использую debug.info ('ваше сообщение') в сочетании с консолью Firebug вместо alert () , поскольку предупреждение прерывает обработку вашего скрипта до тех пор, пока вы отклоняете его, тогда как debug.info довольно ненавязчив.

Вы можете скачать реализацию debug.info здесь.

0
ответ дан 1 December 2019 в 06:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: