2012-09-05 26 views
3

我有一個jQuery的HTML表單,用於捕獲表單提交,但由於某種原因,瀏覽器將Ajax調用發送給後端兩次。沒有javascript錯誤,一切都按預期工作,包括後端返回預期的json。表單提交時發出多個ajax調用

我發現有同樣問題的其他職位,但沒有任何迴應幫助過我。我在下面列出了我的代碼。有沒有人有任何建議,爲什麼這可能會發生?

HTML:

<form action="/rating/create/<?php echo $jobId ?>" method="post" id="rating-form"> 
    <input type="hidden" id="Rating_jobId" name="Rating[jobId]" value="<?php echo $jobId ?>" /> 
    <input id="Rating_quality" type="slider" name="Rating[quality]" value="0" /> 
    <input id="Rating_service" type="slider" name="Rating[service]" value="0" /> 
    <input type="submit" name="submit" value="Submit"> 
</form> 

的JavaScript/jQuery的:

$('#rating-form').live('submit', function() { 

     var action = $(this).attr('action'); 

     var dataset = {'Rating':{ 
         'jobId':$('#Rating_jobId').val(), 
         'quality':$('#Rating_quality').val(), 
         'service':$('#Rating_service').val(), 
         },'ajax':'true'} 

     d = new Date; 
     dateCache = d.getTime(); 
     $.ajax({ 
      type: "POST", 
      url: action +"?"+ dateCache, 
      data: dataset, 
      datatype: "application/json", 
      cache: false 
     }).done(function(response) { 

      if(response.success == 'true'){ 

       $('a.rating-'+ response.jobId).parent().remove(); 
       $.fancybox.close() 

      } else { 
       alert(response.error); 
      } 
     }); 

     return false; 
    }); 
+0

僅供參考:您可以使用'dateCache'跳過整個事件,因爲'POST'請求根本沒有被緩存。另外jQuery也會爲''cache:false'做同樣的事情 – Andreas

+0

你使用的是螢火蟲嗎?你看到有兩個要求正在制定嗎?如果不是,那麼問題可能在後端 –

回答

1

可以通過禁用按鈕,點擊後,當你使用Ajax調用來完成,使之避免這一點。

+0

是否意味着禁用按鈕可點擊?該按鈕只被點擊一次,但執行兩次。我不確定你的建議會有幫助。 – Dubby

0

而不是使rating-form').live('submit', function() {},你爲什麼不只是做

$("form").submit(function() { 
    $(this).ajaxSubmit(); 
    return false; 
}) 

,包括jquery.form.js。要成功回調,請檢查鏈接!