2015-02-07 179 views
0

=====更新再次====(如果有人关心!) 我之前发布的解决方案停止工作,无论出于何种原因。我在我的ajax请求中包含了一个beforeSend,并将我的js部分验证了我的表单。现在就像一个魅力!表单不提交与AJAX

$('#form').on('submit', function(e) { 
e.preventDefault(); //prevents page refresh 
     $.ajax({ 
     type: "post", 
     beforeSend: function(){ // check that form is complete 
         }, 
     url: "client_config_send2.php", 
     data: $(this).serialize(), 
     success: function(data){ 
      alert('Thank you'); hide_request();window.location = "#top"; 
     } 
     }); 
    }); 

编辑

见我的回答如下,使用2 .preventDefault!

我已阅读了许多页面/这个例子,但由于某种原因,我无法让它在“我的”形式上工作。 我只是试图提交我的表单而不刷新页面或打开新的页面/选项卡作为确认消息。 形式:

<form id="form" name="Configurator" method="post" action=""> 
.... //Client configures his product, display an image if they choose, and request a quote. 
<button id="submit_button" type="submit" name="Submit" >Request</button> 
</form> 

的client_config_send2.php的作品,它只是拉了一堆从形式(配置,联系信息)的参数,并把它变成一个电子邮件。在我尝试整合ajax之前,这部分工作正常。

的JS:

$('form').on('submit', function(e) { 
e.preventDefault();  
if(!validateForm(this)){ 
return true; 
} 

$.ajax({ 
     type: "post", 
     url: "client_config_send2.php", 
     data: $(this).serialize(), 
     done: function(data){ 
      alert("Thank you, we will get back to you shortly"); 
} 
     }); 

}) 


</script> 

的validateForm()函数也适用,它会检查配置是否有效,如果电子邮件/联络信息齐全等 在这一点上,validateForm作品:如果信息丢失,弹出警报。但是,当validateForm()返回true时,表单不提交,没有任何反应。

我试过了成功而不是做了,在JS中返回false而不是true,还有很多我在网上找到的东西,但是我迷路了。以前从未使用过AJAX,因此我对语言的微妙之处并不是100%自信!

在此先感谢!

+0

网址是否正确?试试这个,在浏览器中输入url并点击enter。这会返回什么吗? – Christos 2015-02-07 20:27:45

+0

打开你的控制台,点击网络选项卡,然后提交表单,你会看到请求发生。响应的状态代码是什么? – Charlie 2015-02-08 00:07:00

回答

0

“client_config_send2.php”是一个文件名。您提供给Ajax的URL需要是像http://example.com/client_config_send2.php这样的URL。

+0

有两种URL,他使用“相对”类型,但你的是“绝对”。无论如何,如果他的形式是在clien相同的文件夹.... php他的网址应该工作 – 2015-02-07 20:34:26

+0

我听说过相对和绝对**路径**,但没有网址。没有主机作为URL的一部分,网络如何找到主机? – bobdye 2015-02-07 20:37:54

+0

网址和路径是相同的东西 – 2015-02-07 20:39:52

0

变化做了成功:

success: function(data){ 

成功只闪光后您的请求得到了响应,响应代码是OK(HTTP 200)。

+0

也尝试过。我读过“成功”现在已经过时,但无论如何,它都不起作用。不管怎么说,还是要谢谢你! – user2877438 2015-02-07 22:06:55

0

更新代码如下:

$('form').on('submit', function(e) { 
e.preventDefault();  
if(!validateForm(this)){ 
return true; 
} 
var formdata = $(this).serialize(); 

$.ajax({ 
     type: "post", 
     url: "http://www.example.com/client_config_send2.php", 
     data: formdata, 
     success: function(data){ 
      alert("Thank you, we will get back to you shortly"); 
} 
     }); 

}) 


</script> 
+0

不幸的是:(更新了“example.com”显然,但没有任何。validateForm()仍然有效,但没有任何反应,当我点击提交按钮 – user2877438 2015-02-07 22:06:04

0

你能尝试删除/评论event.preventDefault();

如果调用此方法,则不会触发该事件的默认操作。 (http://api.jquery.com/event.preventdefault/

+0

如果我删除preventDefault表单获取提交无论validateForm()函数返回true或假。简单地说,我收到一封电子邮件,其中有一半的信息丢失了! – user2877438 2015-02-09 18:14:42

0

尝试使用以下格式进行编码。该逻辑使用if/else语句来进行ajax调用。

$('form').on('submit', function(e) { 
    //If form could not be validated 
    if(!validateForm(this)){ 
     //prevent the form form submitting 
     alert("Your form is not valid for submission!"); 
     e.preventDefault(); 
    } 
    //else 
    else{ 
     //form input is valid 
     //make the ajax call 
     $.ajax({ 
      type: "post", 
      url: "client_config_send2.php", 
      data: $(this).serialize(), 
      done: function(data){ 
       alert("Thank you, we will get back to you shortly"); 
      } 
      }); 
     } 
    }); 
}); 
+0

感谢您的帮助,尽管还不完美,但如果validateFrom返回false,它会返回警告(好)。它仍然返回错误,并不提交。我会做一些调整,我知道我非常接近解决方案:) – user2877438 2015-02-11 17:58:02

+0

我调整了一下你的代码,并得到它的工作: $('form') .on('submit',function(e){ \t var x = validateForm(); if(x == false){ ... }); 当validateForm为true时,提交工作,它不会打开一个新标签(好!),但会刷新页面并丢失客户输入的所有信息(错误)。 感谢您的帮助,关于更多使用Google搜索以了解如何在ajax之后“保存”信息! 编辑:但确认警报不显示。 – user2877438 2015-02-11 19:25:07

0

这里是最后的代码,不会正是我想要的: - 在validateForm()函数的工作,因为它应该。如果表单不完整,则返回false,弹出警告并且表单不提交 - 如果validateForm()返回true,表单将被提交,弹出确认警报并且页面不刷新。然后,用户可以构建新的配置并提交新的请求,而无需重新输入所有联系信息。

2.preventDefault有窍门!

$('form').on('submit', function(e) { 
e.preventDefault(); //prevents page refresh when form is submitted 
//If form could not be validated 
var x = validateForm(); 
if(x == false){ 
    //prevent the form form submitting 
    e.preventDefault(); 
} 
//else 
else { 
    //form input is valid 
    //make the ajax call 
    $.ajax({ 
     type: "post", 
     url: "client_config_send2.php", 
     data: $(this).serialize(), 
     success: function(data){ 
      alert('Thank you! we will get back to you within 24 hours. Please check your junk/spam folder if you do not receive a response within that time.'); 
     } 
     }); 
    } 
}); 

谢谢大家的帮助!