Ajax发送日期数据
问题描述:
我的jquery脚本出现问题,当我尝试从窗体发送日期值时发生错误,当我将它留在空白处时,它不会显示错误。Ajax发送日期数据
<div class="field-wrap">
<input type="date" name="fecha_nacimiento" required autocomplete="off" maxlength="30" placeholder="Fecha de nacimiento">Fecha de nacimiento</input>
</div>
<script>
$(function(){
$('#entrarBt').click(function(){
$.ajax({
url: 'registro_dpb.php',
type: 'POST', // GET or POST
data: $("#miForm").serialize(), // will be in $_POST on PHP side
success: function(data) { // data is the response from your php script
// This function is called if your AJAX query was successful
alert("Response is: " + data);
},
error: function() {
// This callback is called if your AJAX query has failed
alert("Error!");
}
});
});
});
</script>
答
对于其他SO读者的利益:
我们 (我和哈维尔)检查所有其他错误的可能性几乎 in chat。
我终于找到了原因,对于测试,我评论了整个ajax块,然后注意到该页面仍在提交。
你的问题是相当subtile ......让它很难找到。
但是解决方案非常简单。
您使用<button>
一个<form>
这是绝对正确的内部。
但是你要知道,在HTML5,如果类型<button>
的没有明确定义为“按钮”,它的默认类型是“提交”。
参考here。
这是问题...
既然你想使用一个Ajax请求,允许接收应答,而不重新加载页面提交,你要“防止”一<button>
的这种正常行为。
提交通过此按键是不会被发送到你的PHP脚本,但你的HTML页面(有一个在<form>
标签定义的其它action
,所以默认是“自我”。
所以重新加载页面。 ..使你的AJAX请求失败
因此,有两种方法来解决这个问题:
:定义按钮type
为 “按钮”:
<button type="button" id="entrarBt" [+ other attributes]>Entrar</button>
或
:在您单击处理程序中使用prevent.default()
预防此默认行为。
$('#entrarBt').click(function(e){
e.preventDefault();
$.ajax({
//...
我觉得第二个是另一个程序员谁可以查看您的代码更加明显,但首先是确定了。
对于其他SO读者的利益:
我们 (我和哈维尔)检查所有其他错误的可能性几乎 in chat。
我终于找到了原因,对于测试,我评论了整个ajax块,然后注意到该页面仍在提交。
解决这个问题彻底解决了问题。
这绝对是一件棘手的事情!
简而言之,HTML5 <form>
中的<button>
默认为提交!
'.serialize()'主要用于http变量。如果你打算使用$ _POST,我会建议使用'serializeArray()'。转储在PHP脚本中的$ _POST上看起来如何? – Daerik
由于提及,我犹豫不决*«正在返回错误,当我尝试发送»* **和**之后*«它不会显示任何错误»* ...通常,我只会说*«替换'.serialize(...)'用'.val()'进行测试。 ;) –
我已经尝试过,但错误再次出现,我的问题是没有与我认为的PHP文件,因为即使我使用的价值与否,问题出现,我会用PHP更新我的帖子呢! –