为什么我的POST ajax调用作为GET传递?

时间:2016-03-15 12:13:40

标签: jquery asp.net ajax

经过几天的搜索,这是我的问题(这个问题让我很生气)

我使用post方法传递ajax调用以提交表单。 不幸的是,$(form).submit()不适合我的情况。这是jquery代码:

$.ajax({
    url: '/Controller/_MyJson',
    type: 'POST',
    method: "POST",
    data: $('#form').serialize(),
    success: function (data)              
    {
        // I will add a redirection here later
    }

});

控制器操作:

[HttpPost]
public JsonResult _MyJson (MyViewModel vm)
{
 //action here
}

路线配置:     url: "{controller}/{action}/{id}"

问题是在Chrome控制台中我的调用是作为GET传递的,它给我404错误。在控制器端,_MyJson方法存在,并且声明了[HttpPost]

我的jquery版本是2.1.4。我使用aspx WebForms和MVC模型。

我感谢任何帮助!

UPD: 切换到Mozilla调试器后,我发现我的POST调用是通过statut 301传递的,并且有一个同名的GET,它给出了404错误。 O_O

2 个答案:

答案 0 :(得分:1)

尝试使用简写:

$.post("/Controller/_MyJson", $('#form').serialize(), function (data) {
  // stuff with data
});

答案 1 :(得分:1)

您似乎正在序列化整个表单数据。 Controller HttpPost方法必须匹配此对象,否则GET方法将抛出404错误。尝试在控制器中创建自定义对象,并从ajax调用发送相应的JSON数据。这将解决问题。