2016-04-10 32 views
1

我有一個簡單的形式:當我提交它沒有javascript/jquery,它工作正常,我只有一個插入我的數據庫,一切工作正常。Form submited兩次(jQuery與jQuery)

我寫了一些jquery,在輸入按鈕上方顯示ajax,如果發生錯誤,顯示紅色消息,如果插入成功,顯示爲綠色。我還展示了一個小型的gif裝載機。

我不明白爲什麼當我使用這個jquery時,兩個加載器同時出現,兩個插入在我的數據庫中完成。

我重申,當我評論的JavaScript,它工作正常,我完全相信我的PHP是好的。

$('#addCtg').submit(function() { 
    var action = $(this).attr('action'); 
    var name = $('#name').val() ; 

    $('.messages').slideUp('800', function() { 

     $('#addCtg input[type="submit"]').hide().after('<img src="spin.gif" class="loader">'); 

     $.post(action, { 
      name: name 
     }, function (data) { 
      $('.messages').html(data); 
      $('.messages').slideDown('slow'); 
      $('.loader').fadeOut(); 
      $('#addCtg input[type="submit"]').fadeIn(); 
     }); 
    });  
    return false; 
}); 

我真的不明白爲什麼這是行不通的,因爲我用的是「返回false」來

基本的PHP只是改變的情況下,提交按鈕的基本行爲:

<?php 

require_once('Category.class.php'); 

    if (isset($_POST['name'])) { 

    $name = $_POST['name'] ; 

    if ($name == "") { 
     echo '<div class="error">You have to find a name for your category !</div>' ; 
     exit(); 
    } else { 
     Category::addCategory($name) ; 
     echo '<div class="succes">Succes :) !</div>' ; 
     exit(); 
    } 
} else { 
    echo '<div class="error">An error has occur: name not set !</div>'; 
    exit(); 
} 

而且finnaly我在PHP中在數據庫中添加功能,基本的東西

public static function addCategory($name) { 

    $request = myPDO::getInstance()->prepare(<<<SQL 
      INSERT INTO category (idCtg, name) 
      VALUES (NULL, :name) 
SQL 
      ); 

     $r = $request->execute(array(':name' => $name)); 

     if ($r) { 
      return true ; 
     } else { 
      return false ; 
     } 

} 

我很少過問尋求幫助,但這一次我真的卡住了,先謝謝你

回答

1

你在打電話:$('.messages') - 我敢打賭你有2個元素與類messages。然後他們都會發布到您的服務器。

+0

而且你敢打賭,男人,謝謝你的外眼睛,那是我的不好!我確實有第二種形式來添加文章,並且我正在使用完全相同的課程....感謝您的外部觀點! –

1

一個可能的原因可能是因爲您使用按鈕或提交來發布ajax請求。 試試這個,

$('#addCtg').submit(function (e) { 
    e.preventDefault(); 
    var action = $(this).attr('action'); 
    var name = $('#name').val() ; 

    $('.messages').slideUp('800', function() { 

     $('#addCtg input[type="submit"]').hide().after('<img src="spin.gif" class="loader">'); 

     $.post(action, { 
      name: name 
     }, function (data) { 
      $('.messages').html(data); 
      $('.messages').slideDown('slow'); 
      $('.loader').fadeOut(); 
      $('#addCtg input[type="submit"]').fadeIn(); 
     }); 
    });  
    return false; 
}); 
+0

我也考慮過這個問題,但是和Poul Bak打賭一樣,我在兩個不同的div中使用了相同的類名(.messages),並且沒有鏈接。不管怎樣,謝謝你 :) –