Функция нажатия JQuery не срабатывает с перерывами - PullRequest
3 голосов
/ 20 июля 2009

Ух ты, вот от этого я рву волосы.

Я отслеживаю ссылки в JQuery.

$(".hdr a[id]").mousedown(function(e){
    var h = this;
    var url = "/g/click/" + this.id;
    $.get(url);
  });

Похоже, что иногда браузер бьет вызов ajax. Новая страница загружается до срабатывания трекера кликов. (Это не медленное время ответа; запрос даже не достигает Apache). Это прерывисто и трудно воспроизводимо, но, как правило, появляется после того, как пользователь много сделал на сайте.

В более ранней итерации этого кода я использовал warnDefault, но в итоге он ломает cmd-click и не отслеживает щелчки правой кнопкой мыши.

Есть ли способ убедиться, что это будет работать?

Спасибо за вашу помощь.

Ответы [ 2 ]

2 голосов
/ 20 июля 2009

Похоже на ту же проблему, что и у меня, когда я спросил: $. Post () не успел запуститься? Для меня было добавлено следующее:

$.ajaxSetup({async: false});

Больше не выполнялись асинхронные запросы, поэтому мои элементы заканчивались раньше, чем другие.

1 голос
/ 20 июля 2009

Если вы используете запрос get, ответ будет кэширован. Чтобы облегчить проблему с кешем, вам нужно убедиться, что URL уникален. Вы можете сделать это, каждый раз добавляя в URL уникальный фиктивный элемент строки запроса, или лучше используйте метод .ajax и укажите cache: false.

Я бы не использовал asynch: false, так как это блокирует пользовательский интерфейс, и если ответ не возвращается или задерживается, пользователь в конечном итоге вынужден аварийно завершить работу и не решит проблему с кэшированием.

$(".hdr a[id]").mousedown(function(e){
    var url = "/g/click/" + this.id;
    $.ajax({
         url: url,
         cache: false,
         success: function(data){
                 //do something with the response
                 }
         });
});

N.B Я также могу испытать желание поместить вызов setTimeout в ваш скрипт. Это позволит вам очистить тайм-аут в случае быстрой смены другого события mousedown. Это предотвратит отправку запросов xhr, если пользователь несколько раз отключал.

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