2016-07-27 31 views
-1

我有一個使用ajax提交的表單,但是由於某種原因,如果您更改值並重新提交,那麼它會插入2個重複行,再次提交,然後插入3個重複行時間等等......某處存儲數字,但是對於ajax而言,我並不是100%確定我應該或不應該添加的東西。下面的代碼:Ajax表單遞交遞增時間

$(document).on('submit', '#add-badge-form', function(e) 
{ 
    e.preventDefault(); 
    var data = $(this).serialize(); 
    $.ajax({ 

     type : 'POST', 
     url : 'submit.php', 
     data : data, 
     success : function(data) 
     { 
      $(".add-badge-result").fadeIn(500).show(function() 
       { 
        $(".add-badge-result").html(data); 
       }); 
      $('#add-badge-form').trigger("reset"); 
     } 
    }); 
    return false; 
}); 

編輯:處理表單的PHP:

如果($ _ POST [ '形名'] == '添加徽章'){

 $name = $_POST['name']; 
     $description = $_POST['description']; 
     $level = $_POST['level']; 

     $result = mysqli_query($con,"INSERT INTO Badges (Name,Description,Level) VALUES ('$name','$description','$level')") or die(mysql_error()); 
     mysqli_close($con); 

     if($result) 
     { 
     echo $name." added successfully."; 
     } 
     else 
     { 
     echo "Error adding ".$name."."; 
     } 

更新:

我現在發現,這隻發生在您更改頁面(也使用ajax)之後。所以如果你插入一個表單,然後再次插入而不離開頁面,它可以正常工作。如果您插入,然後更改頁面,然後返回並再次插入,它會插入一個副本。下面是我如何改變頁面:

$(".button").click(function(){ 
    $(".nav li ul a").removeClass("current"); 

    if (this.id == "add-badge") { 
     $("#rightContainer").load("add-badge.php"); 
     $(this).addClass("current"); 
    } else if (this.id == "edit-badge") { 
     $("#rightContainer").load("edit-badges.php"); 
     $(this).addClass("current"); 
    } else if (this.id == "award-badge") { 
     $("#rightContainer").load("award-badge.php"); 
     $(this).addClass("current"); 
    } 
}); 

回答

-1

我會建議您只得到你從你的表單需要的字段:

var data = { field1 : $("#field1").val(), ... };

這將手動防止有人將字段添加到您的形式。

我認爲你序列化數據的方式是問題,所以它應該修復它。

+0

我該如何着手在submit.php上接收這些值?我嘗試了幾種方法,但似乎無法從中得到任何結果。 – BN83

+0

在我的例子中,你將在你的PHP中擁有'$ _POST [「field1」]' – Vuldo

+0

在看到這個之前剛開始工作,我忘記了傳遞表單名稱...我仍然得到重複的字段。 – BN83

0

我已經修復了這個。由於$(document).on('submit', '#add-badge-form', function(e)加載頁面時,它每次加載表單的實例,因此如果我加載頁面5次,它有5個表單實例。我將其更改爲$("#add-badge-form").submit(function(e),現在只提交一個版本,無論頁面已加載多少次。簡單解決方案