2013-11-30 6 views
0

У меня есть кнопка в модальном диалоге пользовательского интерфейса jquery. При нажатии кнопки отправляется запрос AJAX и открывается форма html с кнопкой отправки внутри MODAL DIALOG.Duplicate AJAX REQUEST issue

 $('#buttonid').click(function(){ 
      var id = $('.sec_id').val(); 
      $.ajax({ 
      url: "parts/hesabat_dialog.php", 
      cache: false, 
      data: {"id": id}, 

      beforeSend: function() { 
      . . . 
      }, 
      success: function(html){ 
      . . . 
      } 
      }); 
      return false; 
     }); 

Затем я заполняю формы и нажмите кнопку отправки (это не #buttonid), я посылаю другой запрос AJAX, все данные формы отправляются на страницу do.php.

$('#Formid').submit(function() { 
     var data = $('#Formid').serialize(); 
     var id = $('#id').val(); 
     var url = 'element.php?id='+id; 
     $.ajax({ 
     type: "POST", 
     url: "parts/do.php", 
     cache: true, 
     data: data, 

     beforeSend: function() { 

     $('#dialog').append('Loading...'); 

     }, 

     success: function(data){ 
      $("#dialog").load(url); 
     } 
    }); 
     $("#Formid").unbind('submit'); 
     return false; 
    }); 

Таким образом, проблема заключается в том, что если я нажимаю #buttonid 5 или 6 раз, а затем подать запрос будет отправлен в 6 раз. Вы можете сказать, что используйте unbind. Хорошо, в этом случае unbind должен помочь, но вы знаете, что есть 3 кнопки, если я нажму другую кнопку и вернусь снова к #buttonid, запрос ajax не будет работать, также если я использую unbind, затем закройте модальное диалоговое окно и снова откройте его, Запрос ajax не будет работать снова. КАК ОТКЛЮЧИТЬ МНОЖЕСТВЕННЫЕ ЗАПРОСЫ (сделайте это 1 раз), когда я отправлю, хотя кнопка была нажата 10 раз?

+0

Почему бы не отключить кнопку вместо этого? Как и большинство проектов, даже stackoverflow – zerkms

ответ

0

Я включил js-файл в свой файл AJAX HTML, который загружаю. Когда я перезагружаю или очищаю HTML из DOM, он по-прежнему сохраняет скрипт. Я переместил сценарий, чтобы он не был частью загружаемого HTML-кода.

0

Вы можете определить переменную (вне области действия вашей кнопки), которая содержит состояние запроса ajax.

var button_ajax_state_sending = false; 

    $('#Formid').submit(function() { 
    if(!button_ajax_state_sending){ //only start if false (not sending) 
      var data = $('#Formid').serialize(); 
      var id = $('#id').val(); 
      var url = 'element.php?id='+id; 
      $.ajax({ 
      type: "POST", 
      url: "parts/do.php", 
      cache: true, 
      data: data, 

      beforeSend: function() { 

      $('#dialog').append('Loading...'); 
      button_ajax_state_sending = true; // SET TRUE 

      }, 

      success: function(data){ 
       $("#dialog").load(url); 
       button_ajax_state_sending = false; // SET TRUE 
      } 
     }); 
     return false; 
    }); 
+0

Btw, вам также необходимо сбросить флаг, если запрос не выполнен. – zerkms

1
$(document).ready(function(){ 
$('.one-click').click(function(){ 
    if($(this).data('clicked')){ 
     return false; 
    } 
    else { 
     $(this).data('clicked', true); 
     setTimeout(function(){ 
     $('.one-click').data('clicked', false) 
    }, 2000); 
    } 
}); 

});

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

+0

Теперь он не дублирует запрос. Но если я закрываю модальный диалог и снова открываю и нажимаю '.one_click', снова дублируется. – Rashad