2012-03-16 47 views
0

我想获取提交表单而不重新加载页面。jquery,AJAX表单提交不起作用。页面崩溃

这里的脚本:

$(function() { 
    $("#submit").click(function() { 
     var email = document.getElementById('emailaddress'); 
     var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/; 
     if (!filter.test(email.value)) { 
      $('#invalidmail').show(); 
      var t=setTimeout(function(){$('#invalidmail').fadeOut("slow");},2000); 
      email.focus; 
      return false; 
     } else {  
      $.ajax({ 
       type: "POST", 
       url: "traces_form_handler.cgi", 
       data: email, 
       success: function(){ 
        alert("success!"); 
       } 
      }); 
      alert("success!"); 
      return false; 
     }; 

     }); 
}); 
</script> 

和这里的HTML

<form name="form" method="post"> 
    Email: <input type="text" name="email" id="emailaddress" /> 
    <input type="submit" value="Submit" id="submit"/> 
    </form>   
    <p id="invalidmail">Ops! The address you provided is not valid. Please retry.</p> 

它的工作原理,直到无效邮件的一部分,但如果我提出一个有效的电子邮件地址,浏览器崩溃。

有什么建议吗?

谢谢

+3

您需要防止默认提交表单的行动。您正在发送AJAX请求*和*同时提交表单。 – 2012-03-16 17:43:17

+0

您还尝试过哪些浏览器? – Lix 2012-03-16 17:44:20

+0

@Diodeus不是'返回false';'呢? Lix chrome! – lorussian 2012-03-16 17:46:14

回答

2

我不知道是否会导致浏览器崩溃。但是你正在发送一个dom元素作为数据到ajax请求,我猜你只想发送它的值。

 $.ajax({ 
      type: "POST", 
      url: "traces_form_handler.cgi", 
      data: { email: email.value },//Check here in your code 
      success: function(){ 
       alert("success!"); 
      } 
     }); 
+0

这实际上工作! – lorussian 2012-03-16 18:07:45

0

这个属性是导致问题

url: "traces_form_handler.cgi", 

我有它在我的浏览器FF 10.0.2

上的错误控制台错误测试是: 错误:未捕获的异常:异常.. “无法转换JavaScript参数”nsresult:“0x80570009(NS_ERROR_XPC_BAD_CONVERT_JS):: line 7601”data:no]

Solution: url:"some_valid_url_.php" 
+0

我不能将它发送给python脚本吗? – lorussian 2012-03-16 18:08:30

0

您可以使用表单提交的事件,它; S更好

HTML

<form id="myForm" name="form" method="post"> 
    Email: <input type="text" name="email" id="emailaddress" /> 
    <input type="submit" value="Submit" id="submit"/> 
</form> 
<p id="invalidmail">Ops! The address you provided is not valid. Please retry.</p> 

JS

$(function() { 
​$("#myForm").on('submit', function(e){ 
e.preventDefault(); 
var email=$("#emailaddress"); 
var filter = /^\[email protected][a-zA-Z_]+?\.[a-zA-Z]{2,3}$/; 
    if (!filter.test(email.value)) { 
     $('#invalidmail').show(); 
     var t=setTimeout(function(){ 
      $('#invalidmail').fadeOut("slow");},2000); 
     email.focus; 
     return false; 
    } 
    else 
    {  
     $.ajax({ 
      type: "POST", 
      url: "my_server-page.php", 
      data: email.val(), 
      success: function(data){ 
       alert("success!"); 
      } 
     }); 
    } 

});​​ 
});