2012-05-18 2 views
2

J'utilise le plugin AJAX de Malsup. Ce que je vais est une page de «chat», fondamentalement un div qui est actualisé toutes les 2 secondes, et actualise quand l'utilisateur soumet quelque chose à la fenêtre de causerie.Formulaire Ajax soumettant plusieurs fois. Parfois

mise en page brute HTML de la page:

<div id='refresh_openmsg'> 
    <div id='chatdiv'>Chat window here</div> 
    </div> 

    <div id='reply_block'> 
    <form id='send_msg_form'>Basic form goes here</form> 
    </div> 

JS:

//create timer to refresh chat window every 2 seconds 

    <script type='text/javascript'> 
    $(document).ready(function() { 
    refresh_openmsg = setInterval(function(){$('#refresh_openmsg').load('messaging.php?view='+the_page+' #refresh_openmsg');}, 2000); 
    }); 
    </script> 

    //This is what happens when the form is submitted 

    <script type='text/javascript'> 
    $(document).ready(function() { 
     var options = { 
      target:  '', 
      dataType:  'html', 
      beforeSubmit: showRequest_sendmsg,  
      success:  showResponse_sendmsg 
     }; 
     $('#send_msg_form').live('submit', function() { 
      $(this).ajaxSubmit(options); 
      return false; 
     }); 
    }); 
    function showRequest_sendmsg(formData, jqForm, options) { 
     return true; 
    } 
    function showResponse_sendmsg(responseText, statusText, xhr, $form) { 
     $("#reply_block").load('messaging.php?view='+the_page+' #reply_block', function() { 
     $('#reply_area').focus(); 
     $("#refresh_openmsg").load('messaging.php?view='+the_page+' #refresh_openmsg', function() { 
      $("html, body").animate({ scrollTop: $(document).height() }, 500);   
     }); 
     }).focus(); 
    } 
    </script> 

//on showResponse, I'm reloading the #reply_block div, and reloading the #refresh_openmsg div (#refresh_openmsg div is also being reloaded every 2 seconds) 

La question que je suis en cours d'exécution en est que le formulaire est soumis plusieurs fois, parfois deux fois, parfois 3 fois, et parfois 4 ou 5. Très étrange, j'ai déjà construit des pages similaires et je n'ai jamais rencontré ce problème. Je sais que c'est quelque chose avec mon code, et les rafraichissements sans fin, mais c'est ma seule option pour le moment. Quelqu'un voit un problème avec ça?

J'ai essayé de mettre .die() avant l'événement .live lors de la soumission du formulaire mais cela n'a pas résolu le problème.

Répondre

0

Vous rechargez réponse bloc div qui est à l'origine de cette pièce doit être déclenchée, donc après chaque charge un plus auditeur s'ajoute

$('#send_msg_form').live('submit', function() { 
      $(this).ajaxSubmit(options); 
      return false; 
     }); 

vous pouvez essayer d'utiliser comme ceci:

$('#send_msg_form').live('submit', replyBlockDivLoaderHandler); 
function replyBlockDivLoaderHandler(event){ 
    if(event.handled != true){ 
     $(this).ajaxSubmit(options); 
     event.handled = true; 
    } 
} 
+0

Doesn n'est-ce pas déclenché lorsque le formulaire est soumis? – DanielOlivasJr

+0

Oui, il sera déclenché au formulaire de soumission, mais puisque vous rechargez cette page encore et encore, plusieurs écouteurs sont attachés – mprabhat

+0

Et si j'ajoutais $ ("# send_msg_form"). Die ('submit'); DanielOlivasJr

Questions connexes