Обратная ссылка для другого (того же) XMLHttpRequest - PullRequest
0 голосов
/ 01 ноября 2010

У меня есть одна ссылка, которая делает ajax-запрос, и она печатает XHR-запросом другую ссылку, аналогичную этой, перед кликом

, так что это похоже на цикл:

, начиная XHR с

<a href="javascript:void(0)" class="doXHR">do XHR</a>

, чем в функции успеха Ajax, я повторяю в html эту ссылку:

<a href="javascript:void(0)" class="doXHR">do XHR</a>

, но когда я выводил ту же ссылку на html по функции успеха предыдущего вызова doHXR, это не позволяет мнесделать другой (вызов doXHR ajax)

, поэтому, если я нажимаю на ту же ссылку, но та же ссылка генерируется из ajax, это не позволяет мне отправить другой (тот же) запрос doXHR ...: /

есть идеи?

извините за мой плохой английский: P

Ответы [ 2 ]

0 голосов
/ 01 ноября 2010

Я бы не стал удалять ссылку, а затем полностью воссоздавать ее, когда вы выполняете запрос Ajax.А если вы просто используете XMLHttpRequest напрямую, я рекомендую вам посмотреть замечательную документацию jQuery Ajax , чтобы узнать, как это сделать способом jQuery.

Если вам нужно, чтобы второй последовательный щелчок по ссылке не имел никакого эффекта (то есть до тех пор, пока запрос не будет выполнен), вы можете использовать метод .one() jQuery , чтобы гарантировать, что обработчик событийсрабатывает только один раз:

$(function() {
    function doAjax() {
        $.ajax({..., success: function() {
            // Do what you must to the HTML page

            // Allow the user to click again to make the request again
            $('.doXHR').one('click', doAjax);
        }, ...});
    }

    $('.doXHR').one('click', doAjax);
});

Скрытие или изменение цвета ссылки

Если вы хотите, чтобы страница работала так, как если бы ссылка была удалена во время выполнения запроса:

$('.doXHR').css('display', 'none'); // before Ajax request
$('.doXHR').css('display', ''); // after Ajax request

Если вы просто хотите выделить ссылку серым цветом, используйте:

$('.doXHR').css('color', 'gray'); // before Ajax request
$('.doXHR').css('color', ''); // after Ajax request

Это дополнительно к использованию .one(...) для привязки обработчика событий щелчка.

0 голосов
/ 01 ноября 2010

Мне кажется, что вы назначаете прослушиватель событий для вашей ссылки do XHR, и похоже, что функция обратного вызова изменяет эту ссылку с помощью кода, который вы упомянули.

При этом исходный прослушиватель событийссылка на эту ссылку исчезла, и вам придется ее снова прикрепить.Другая возможность - использовать функцию jQuery .live, которая также запускает события для элементов, подключенных к DOM после «привязки» слушателя события:

$(".doXHR").live('click', function() {
  // Live handler called.
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...