首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >$.post刷新页面,但$.ajax阻止刷新页面

$.post刷新页面,但$.ajax阻止刷新页面
EN

Stack Overflow用户
提问于 2015-10-21 06:50:15
回答 1查看 310关注 0票数 1

我有这个form

代码语言:javascript
运行
复制
<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,如下所示:

代码语言:javascript
运行
复制
$("#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,如下所示:

代码语言:javascript
运行
复制
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不同。我更喜欢速记法,因为它既简单又优雅。但由于上述问题,我无法使用它。

是否有任何方法可以防止formsubmitHandler中的默认操作?或者任何关于为什么$.post不阻止页面刷新的信息?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-21 06:59:34

因为您使用的是FormData();,这只能与xmlHttpRequest一起使用,而$.post()没有它,但是$.ajax()有。这就是为什么$.ajax()在工作,而速记$.post()不起作用的原因。

代码语言:javascript
运行
复制
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对象:

代码语言:javascript
运行
复制
var formData=new FormData($("#frmValidate")[0]);  

如果您试图通过ajax上传一个文件,那么我猜您知道如何将这些选项设置为false

代码语言:javascript
运行
复制
processData: false,
contentType: false
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33252724

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档