2013-09-11 2 views
1

Мне действительно нужно понять, как блокировать запросы ajax в ожидании. Позвольте мне объяснить пример:блок двойной запрос, пока ajax находится на рассмотрении

У меня есть тип ввода, называемый «share», и когда я что-то пишу и нажимаю, введите ajax, возьмите результат и вставьте внутри mysql. Если я это сделаю, нажимая много времени на кнопку ввода, это приведет к большему количеству результатов, например, сколько раз я нажал, даже если в php есть элемент управления. Я думаю, это проблема запроса ajax, потому что контрольный php, я уверен, прав. Огромное спасибо.

это код примера:

форма

<input type="text" class="share"> 

Js

$.fn.enterKey = function (fnc) { // function for check when i press enter 
    return this.each(function() { 
     $(this).keypress(function (ev) { 
      var keycode = (ev.keyCode ? ev.keyCode : ev.which); 
      if (keycode == '13') { 
       fnc.call(this, ev); 
      } 
     }) 
    }) 
} 

$('.share').enterKey(function() { // ajax request 
    var comment = $(this); 
    if (comment.val() != "") { 
     $.ajax({ 
      type: "POST", 
      url: add_comment.urlRemove, 
      data: "text=" + comment.val(), 
      success: function(html) { 
       comment.val(''); 
      }, 
      error: function(){ 
       alert('Error on ajax call'); 
      } 
     }); 
    } 
    else { 
     return false; 
    } 
}); 

ответ

1

Вы можете установить переменную, чтобы определить, является ли уже отправлен запрос, как это :

var alreadySent = false; 

$('.share').enterKey(function() { 
    var comment = $(this); 
    if (comment.val() != "") { 
     if(!requestSent) { 
      // Set variable to true 
      alreadySent = true; 

      $.ajax({ 
       type: "POST", 
       url: add_comment.urlRemove, 
       data: "text=" + comment.val(), 
       success: function(html) { 
        // Set variable to false 
        alreadySent = false; 
        comment.val(''); 
       }, 
       error: function(){ 
        // Set variable to false 
        alreadySent = false; 
        alert('Error on ajax call'); 
       } 
      }); 
     } 
    } 
}); 
+0

Он не используя кнопку, чтобы вызвать AJAX fyi. –

+0

@ErikPhilips - обновленный ответ. –

+0

Спасибо, я думаю, это прекрасно, у меня есть вопросы о том, могу ли я, этот метод безопасен? Могу ли я использовать этот метод для всех событий? ex, click, hover, ecc ... Большое вам спасибо! – fabrizio

Смежные вопросы