jquery ajax post callback - манипуляции прекращаются после «третьего» вызова - PullRequest
0 голосов
/ 11 августа 2009

РЕДАКТИРОВАТЬ : Проблема не связана с Boxy, я столкнулся с той же проблемой, когда использовал метод загрузки JQuery.

EDIT 2 : Когда я вынимаю link.remove() изнутри обратного вызова ajax и помещаю его перед загрузкой ajax, проблема больше не возникает. Существуют ли ограничения для управления элементами внутри функции обратного вызова ajax.

Я использую JQuery с плагином Boxy.

При щелчке ссылки «Флаг» на странице появляется модальное окно Boxy, которое загружает форму через ajax. Когда пользователь отправляет форму, ссылка (тег <a>) удаляется, и из ответа ajax создается новая. Этот механизм работает, ну, в 3 раза! После 3-го, функция обратного вызова просто не удаляет / заменяет / добавляет (проверял несколько вариантов манипулирования) элемента.

Единственный совет, который я имею, заключается в том, что после 3-го вызова родительский элемент ссылки становится недоступным для выбора. Однако я ничего не могу сделать из этого.

Извините, если это очень тривиальная проблема, у меня нет опыта программирования на стороне клиента.

Соответствующий HTML ниже:

<div class="flag-link">
    <img class="flag-img" style="width: 16px; visibility: hidden;" src="/static/images/flag.png" alt=""/>
    <a class="unflagged" href="/i/flag/showform/9/1/?next=/users/1/ozgurisil">Flag</a>
</div>

Вот соответствующий код js:

$(document).ready(function() {

    $('div.flag-link a.unflagged').live('click', function(e){   
        doFlag(e);
        return false;
    }); 
...

});


function doFlag(e) {
   var link = $(e.target);
   var url = link.attr('href');

   Boxy.load(url, {title:'Inappropriate Content', unloadOnHide:true, cache:false, behaviours: function(r) {
    $("#flag-form").live("submit", function(){

        var post_url = $("#flag-form").attr('action');
        boxy = Boxy.get(this);
        boxy.hideAndUnload();
        $.post(post_url, $("#flag-form").serialize(), function(data){

            par = link.parent();                
            par.append(data);
            alert (par.attr('class')); //BECOMES UNDEFINED AT THE 3RD CALL!!
            par.children('img.flag-img').css('visibility', 'visible');
            link.remove();                                              
        });

        return false;
        }); 
    }});

}

Ответы [ 2 ]

0 голосов
/ 08 мая 2010

У меня была такая же проблема, я не мог запустить javascript после вызова boxy. Поэтому я поместил весь свой код JavaScript в afterShow: function один из атрибутов boxy. Я могу бежать почти за исключением отправки моей формы. Мой путь может тебе кое-что дать.

0 голосов
/ 12 февраля 2010

Старый и поздний ответ, но .. Я нашел это, пока гуглил свой ответ, так что ..:)

Я думаю, что это проблема с генерируемой "немодифицированной" ошибкой, потому что вы возвращаете те же данные Ajax.

Похоже, что это происходит, даже если для опции "ifModified" установлено значение false (что также является значением по умолчанию).

Возврат одних и тех же данных Ajax три раза вызовет у меня проблемы (jQuery 1.4). Создание уникальных данных (просто добавление времени / случайного числа в ответе) устраняет проблему.

Я не знаю, если это проблема браузера (Firefox), jQuery или сервера (Apache) ..

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