2015-07-10 86 views
1

任何人都可以看到我的代碼。我認爲,阿賈克斯送我的數據的兩倍,這就是爲什麼在我的數據庫重複記錄發送阿賈克斯2次

<script type="text/javascript"> 

    function isValidEmailAddress(email) { 
     var regex = /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i; 
     return regex.test(email); 
    } 

    function check() { 
     var registration = $('input'); 
     registration.removeClass('error').removeClass('valid'); 
     var error = 0; 
     registration.each(function() { 
      var value = $(this).val(); 
      if (value.length < 4 || value === null) { 
       $(this).addClass('error').animate({ opacity: 0.5}, 500); 
       error++; 
      } else { 
       $(this).addClass('valid'); 
      } 
     }); 
     if (!error) { 
      if ($('#password').val() != $('#conf_password').val()) { 
       $('input[type=password]').each(function() { 
        $(this).removeClass('valid').addClass('error'); 
       }); 
      } 
      var email = $('input[type=email]').val(); 
      if (email.length < 1 || email.value == null && !isValidEmailAddress(email)) { 
       $(this).addClass('error'); 
       error++; 
      } 
      else { 
       $(this).addClass('valid'); 
      } 
     } 
    } 

    function send_form() { 
     check(); 
     var data = $('#registration').serialize(); 
     $.ajax({ 
       type: "POST", 
       url: "{{ path('registrationAction') }}", 
       data: data, 
       dataType : 'json', 
       success: function (data) { 
        if(data.success == true){ 
         window.location.replace("{{ path('loginAction') }}"); 
        } 
        else 
         alert("Error"); 
        } 
       } 
     ); 
    } 

    $(function() { 
     $('#submit_form').click(function() { 
      send_form(); 
     }); 
    }); 
</script> 

還有一個問題,我的形式在任何情況下發送的,雖然它不應該。我該怎麼做,如果有錯誤,表格不發送

我可能會錯過什麼?請幫助

回答

3

當您通過AJAX提交時,您不會阻止正常表單提交。此外,最好將表單提交與您的表單submit事件綁定,而不是您的提交按鈕click,因爲表單也會在Enter按鍵上提交。您需要執行以下操作:

$(function() { 
    $('#form-name').submit(function (event) { 
     event.preventDefault(); 
     send_form(); 
    }); 
}); 
+0

@Etarnal謝謝你的回答。但現在,註冊後我不會重定向到loginAction?會是什麼呢? –

+0

可能有幾個原因 - 嘗試記錄你的ajax請求返回的內容。另外,如果你的腳本沒有返回有效的json響應,你應該提供'error'的回調函數。 – Eternal1

+0

我找到了原因。我必須檢查是否存在php $ _GET,但它不會在我的代碼中發送ajax。也許你知道如何使用jQuery獲取參數? –

-1

有一個全局變量

var req_sent = 0; 

之前Ajax請求把

if(req_sent == 1){ 
return; 
} 
req_sent = 1; 

在阿賈克斯的成功和錯誤回調設置

req_sent = 0 

呼籲對驗證方法表格提交

<form onsubmit="checkIfValid()">.... 

如果表單無效,此方法應返回false。您的表單不會被提交。

0

在表單提交事件給返回false或否則您的表單獲取提交您的ajax後提交。

$(function() { 
    $('#submit_form').click(function() { 
     send_form(); 
     return false; 
    }); 
});