2012-10-02 313 views
0

爲什麼這個Ajax電話給我回兩個答案?首先,以一種幾乎不可察覺的方式得出正確的答案,然後是另一個?Ajax調用執行兩次?

表單頁面

$(document).on('click','.save-action',function(){ 
        //var text = tinyMCE.get('#action-desc').getContent(); 
        if($("#form-save-action").validationEngine('validate')) 
        { 

         $.ajax({ 
          type: "POST", 
          cache: false, 
          data: $("#form-save-action").serialize(), 
          url:"modules/actions/insertaction.php",  

          success : function (data) { 

           $("#response-message").html(data); 

          } 
         }) 
        } 

       }); 
AdicionarAcção 諾姆達acção Descrição
Gravar

Insertaction.php

$exists = $action->actionExists($actionName); 



if($exists == 0) 
{ 
     $action->insertAction(array($actionName,$action->clearContent($actionDesc),1)); 
     echo 'Acção adicionada com sucesso!'; 
} 
if($exists >= 1) 
{ 
     echo 'Acção já existe!'; 
} 

所以,如果我在.save動作按鈕點擊,它給了我第一次回正確答案,然後另外一個。

PS:Ajax調用被包裹在一個$(document).ready功能

+0

這個表格是否被動態加載? –

+0

對兩者都是。和@karthikr,e.preventDefault()什麼都不做:( –

回答

2

只給一個正式的答案(這是在評論發現):

腳本被調用兩次。通過HTML屬性或加載時。您需要確保不會運行腳本兩次,否則事件處理程序將被添加兩次(並且,因此,該函數將運行兩次)。

+0

謝謝大家! –

-1

試用活動綁定到類直接

$('.save-action').click(function(e){ 
       e.preventDefault(); 
       //var text = tinyMCE.get('#action-desc').getContent(); 
       if($("#form-save-action").validationEngine('validate')) 
       { 

        $.ajax({ 
         type: "POST", 
         cache: false, 
         data: $("#form-save-action").serialize(), 
         url:"modules/actions/insertaction.php",  

         success : function (data) { 

          $("#response-message").html(data); 

         } 
        }) 
       } 

      }); 
+0

這不起作用,因爲表單正在被ajax加載,它需要通過.on函數 –

+0

不jQuery用完全相同的方式解釋這一點?我很確定他們觸發了相同的jQuery函數,並且它的解釋方式相同 – cegfault

+0

@cegfault這取決於他是否包含每個負載的腳本,或者僅在頁面加載時包含腳本。 –