ajax提交总是返回false

时间:2015-05-26 10:25:34

标签: jquery ajax asp.net-mvc forms

我有表单供用户提交,我在布局页面中呈现为部分视图。 我使用这个脚本提交局部视图,根据我放在它上面的breackpoint,它总是返回false,数据确实提交给Db,表格没有清除它上面的数据。我在提交按钮上也有一个小脚本但是breackpoint永远不会到达那里。 这是我使用的脚本:

 $('#contact').submit(function () {
    $.ajax({
        url: this.action,
        type: this.method,
        data: $(this).serialize(),
        success: function (result) {
            $('#contact').html(result);
        }
    });
    return false;
});

$("#Send").bind('click', function (event) {
    $("#contact").submit();
});

2 个答案:

答案 0 :(得分:2)

您告诉return false。 Ajax以异步方式运行,因此代码只会启动Ajax,然后转到下一步 - 返回false。它没有时间点击success(在返回false之前)。

相反,我会做这样的事情:

$('#contact').submit(function (e) {
    e.preventDefault(); //prevents the submit
    $.ajax({
        url: this.action,
        type: this.method,
        data: $(this).serialize(),
        datatype : 'html',
        success: function (result) {
            $('#contact').html(result);
        }
    });
});

您还可以选择通过添加选项async: false来同步运行Ajax,但不建议这样做。

正如A. Wolff在评论中提到的,return falsee.preventDefault基本上做同样的事情。

如果Ajax不成功,那么该处理程序永远不会被触发。也许为error添加处理程序可以澄清错误的真正来源:

$.ajax({
    url: this.action,
    type: this.method,
    data: $(this).serialize(),
    datatype : 'html',
    success: function (result) {
       $('#contact').html(result);
    },
    error: function(XMLHttpRequest, textStatus, errorThrown) { 
       alert("Status: " + textStatus + " Error: " + errorThrown);  
    }
});

答案 1 :(得分:0)

您是否尝试过使用preventDefault

$('#contact').submit(function (e) {
   e.preventDefault();
   $.ajax({
       url: this.action,
       type: this.method,
       data: $(this).serialize(),
       success: function (result) {
           $('#contact').html(result);
       }
   });
});

修改

你有#contact的提交处理程序,它当然是一个表单。您的成功函数会将控制器返回的局部视图放在... #contact内吗?这真的是你想要的吗?如果要将表单替换为空白表单,则部分视图应仅包含表单字段,因为您尝试将html发布到#contact(表单)中。也许你想针对其他一些div?