我有这个form
<form id="frmValidate" action="Controller/Action" novalidate>
<input type="text" placeholder="Enter Name" name="names"/><br/>
<input type="submit" value="Submit form"/>
</form>
我已经将jquery validation插件应用于上述form
,如下所示:
$("#frmValidate").validate({
rules: {
names: {
required: true,
minlength: 5
}
},
messages:{
names:{
required:'Name is required',
minlength: jQuery.validator.format("At least {0} characters required!")
}
},
errorClass:'invalid',
submitHandler:function(form){
var url=$(form).attr('action');
var formData=new FormData($("#frmValidate"));
$.post(url,formData,function(){
alert('submit Done');
});
}
});
当我使用$.post
( $.ajax - POST
的缩写)时,它会刷新页面,但是如果我使用$.ajax
并键入Post
,如下所示:
submitHandler:function(form){
var url=$(form).attr('action');
var formData=new FormData($("#frmValidate"));
$.ajax({
url:url,
type: 'POST',
data: formdata,
processData: false,
contentType: false,
success:function(response){
alert(response);
},
error:function(response){
alert(response);
}
});
}
这不会刷新页面并成功地获得响应,这与$.post
不同。我更喜欢速记法,因为它既简单又优雅。但由于上述问题,我无法使用它。
是否有任何方法可以防止
form
在submitHandler
中的默认操作?或者任何关于为什么$.post
不阻止页面刷新的信息?
发布于 2015-10-21 06:59:34
因为您使用的是FormData();
,这只能与xmlHttpRequest
一起使用,而$.post()
没有它,但是$.ajax()
有。这就是为什么$.ajax()
在工作,而速记$.post()
不起作用的原因。
submitHandler:function(form){
var url=$(form).attr('action');
var formData=$("#frmValidate").serialize(); // instead serialize it.
$.post(url,formData,function(){
alert('submit Done');
});
}
我还想补充一点,如果您正在使用FormData()
,那么请确保传递form
,而不是jQuery对象:
var formData=new FormData($("#frmValidate")[0]);
如果您试图通过ajax上传一个文件,那么我猜您知道如何将这些选项设置为false
:
processData: false,
contentType: false
https://stackoverflow.com/questions/33252724
复制相似问题