【问题标题】:Ajax post is not receiving json from mvc controllerAjax 帖子未从 mvc 控制器接收 json
【发布时间】:2019-07-21 13:27:59
【问题描述】:

我的 javacript 看起来像这样:

namespace ContactPage {
$(() => {

    //contact info
    let $firstName = $('#first-name'), $lastName = $('#last-name'), $email = $('#email');
    //form
    let $form = $('#main-form');
    $form.submit(() => {
        let data = $form.serialize();
        var post = $.post('/contact', data, function () {
            console.log('posted');
        });

        post.done(function (data) {
            console.log('done', data);
        })
        .fail(function (data) {
            console.log('fail', data);
        })
        .always(function (data) {
            console.log('always', data);
        });
    });
});

}

MVC .net C# 控制器成功接收数据(代码如下所示),但是,javascript 不等待响应,浏览器最终显示 Json。我错过了什么?

    [HttpPost]
    public ActionResult Index(ContactModel model)
    {
        var cl = seretContext.ContactLogs.Create();

        cl.Email = model.email;
        cl.Comment = model.message;

        seretContext.Set<ContactLog>().Add(cl);
        seretContext.SaveChanges();

        return Json(new { redirectTo = "/" });
    }

并且cshtml有一个提交按钮如下:

<div class="text-center">
                <button id="orderForm" class="btn btn-success btn-lg" type="submit" >Send</button>
            </div>

浏览器立即显示原始 Json...而不是接收 Json 以便对其进行处理。

浏览器显示 {"redirectTo":"/"}

【问题讨论】:

  • 请添加一个minimal reproducible example 以显示实际问题(但我猜您不会阻止提交表单)。
  • 好的,我已经添加了完整的打字稿文件和 cshtml - 打字稿包含来自@Nicolay 的以下建议

标签: jquery ajax post model-view-controller controller


【解决方案1】:

你能尝试这样的方法来捕捉所有可能的结果吗?

var post = $.post('/contact', function(){
    console.log('posted');
});

post.done(function(data) {
    console.log('done', data);
})
.fail(function(data) {
    console.log('fail', data);
})
.always(function(data) {
    console.log('always', data);
});

【讨论】:

  • 我已经按照您的建议进行了修改,但控制台仍然空白,浏览器仍然只显示原始 json - 我确定它一定很明显,但我无法弄清楚
  • 您的提交按钮可能会导致回发,您可以删除 type=submit 并在任一按钮或 jquery 代码中添加 onclick 处理程序。
【解决方案2】:

原来是一个非常愚蠢的错误——我很抱歉——表单的 id 拼写错误,所以 javascript 甚至没有得到表单。

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 2017-01-03
  • 2019-12-22
  • 2015-11-15
  • 2018-09-16
相关资源
最近更新 更多