2010-08-28 4 views
2

Как предотвратить подобные, если пользователь нажмет много раз на ссылку, которая запускает AJAX вызов, что он только бежать снова после того, как она была успешнойТолько один Аякс вызова, ждать, пока успеха до следующего щелчка

+0

Почему бы не вставить код, из которого вы начинаете. – kalpaitch

ответ

2

Одним простым решением является добавление класса к ссылке при щелчке пользователем и удаление класса при получении ответа.

Каждый щелчок ссылки проверяет, существует ли класс pending и отправляет запрос AJAX, если нет.

Затем обратный вызов complete: удаляет класс pending.

$('a.myLink').click(function() { 
    var $th = $(this); 
    if(!$th.hasClass('pending')) { 
     $th.addClass('pending'); 
     $.ajax({ 
      url:'something', 
      complete: function() { 
       $th.removeClass('pending'); 
      } 
     }); 
    } 
}); 
+0

Поскольку вы используете jQuery, вы также можете использовать jQuery.data() для подключения этого значения ожидающих данных См. http://api.jquery.com/jQuery. data/ – Dancrumb

+0

@ Dancrumb - Это правда. Хорошая вещь о добавлении класса заключается в том, что вы можете использовать его, чтобы предоставить пользователю некоторую визуальную обратную связь, чтобы показать, что ссылка не доступна. Готов поспорить, что это более быстрая операция, чем доступ к '.data()'. Не уверен, хотя. – user113716

2

если вы имеете в виду то, что, я думаю, вы имеете в виду, то, как только нажимается кнопка, вы отключите кнопку в своей функции ajax (прежде чем перейти к фактическому составлению HTTP-запроса). Затем, как только ваш вызов ajax будет завершен, функция onreadystate снова включит его.

, чтобы отключить кнопку, если у нее есть идентификатор.

document.getElementById("theidofthebutton").enabled = false; 

включить его заново ...

document.getElementById("theidofthebutton").enabled = true; 

Edit: Я вижу, вы ссылаетесь на ссылку не кнопка. Я мог ошибаться, но я думаю, что вы все равно можете отключить таким же образом.

+0

MrVimes - Я думал, что вы можете что-то сказать об отключении ссылки, но я сделал быстрый тест. Кажется, не работает. http://jsfiddle.net/KkYCm/ – user113716

1

Попробуйте использовать JQuery плагин BlockUI блокировать пользователю снова, нажав на ссылку. Это можно сделать на уровне элемента или страницы.

// unblock when ajax activity stops 
$(document).ajaxStop($.unblockUI); 

function test() { 
    $.ajax({ url: 'wait.php', cache: false }); 
} 

$(document).ready(function() { 
    $('#pageDemo2').click(function() { 
     $('div.test').block({ message: '<h1><img src="busy.gif" /> Just a moment...</h1>' }); 
     test(); 
    }); 
}); 
Смежные вопросы