Аякс повторяет предыдущие запросы - PullRequest
1 голос
/ 11 сентября 2011

Я работаю с codeigntier и пробую кое-что с ajax. Это довольно сложно объяснить.

У меня есть контроллер Products с методом «обзор» и представлением «products_overview».

Это контроллер

Это вид

Моя проблема в том, что когда я делаю Ajax-вызов в представлении в этой части:

$('body').delegate('#notification-close', 'click', function(){
    $('#notification').fadeOut(200, function(){
        $('#notification').remove();
    });

    $('#blanket').fadeOut(200).remove();

    $.ajax({
        type: 'GET',
        url: '<?php echo $current_get_url; ?>',
        success : function (result) {
            $('#column-middle').html(result);
        }
    });

});

Он удваивает вызов ajax каждый раз, когда я его использую. И что-нибудь еще. Контроллер продуктов создает пагинационные ссылки. Когда я иду туда-сюда несколько раз, я также делаю Ajax-звонки. Допустим, я делаю это 4 раза. Затем, когда я использую вышеупомянутый ajax-вызов, он выполнит эти 4 предыдущих вызова, а затем начнет удваиваться!

Итак, я здесь немного потерялся. Когда я ставлю setTimeout на $('#column-middle').html(result), он будет выполнен один раз, но затем выдаст ошибку jQuery, что «результат» не определен.

Ответы [ 2 ]

0 голосов
/ 11 сентября 2011

Вы пробовали добавить undelegate('click')?

$('body').undelegate('click').delegate('#notification-close', 'click', function(){
    $('#notification').fadeOut(200, function(){
        $('#notification').remove();
    });

    $('#blanket').fadeOut(200).remove();

    $.ajax({
        type: 'GET',
        url: '<?php echo $current_get_url; ?>',
        success : function (result) {
            $('#column-middle').html(result);
        }
    });

});
0 голосов
/ 11 сентября 2011

Вы должны вернуть false из функции-обработчика делегата , чтобы остановить всплытие событий, например:

$('body').delegate('#notification-close', 'click', function(){
    // processing

    // stop further handlers from executing
    return false;
});

См. раздел предупреждений здесь .Вы также можете использовать свойства области закрытия для предотвращения удвоения вызова:

var column_middle_working = false;
$('body').delegate('#notification-close', 'click', function(){
    if (column_middle_working) return;
    column_middle_working = true;
    // do what you do

    $.ajax({
        type: 'GET',
        url: '<?php echo $current_get_url; ?>',
        success : function (result) {
            $('#column-middle').html(result);
            column_middle_working = false;
        }
    });

});

Но все же рекомендуем вам найти реальную причину такого поведения.

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