【问题标题】:JavaScript skipping over AJAX PostJavaScript 跳过 AJAX Post
【发布时间】:2016-05-10 10:24:08
【问题描述】:

我有一个在单击按钮时触发的 JavaScript 函数,但 Chrome 开发人员工具跳过了 AJAX 帖子。发生 500 错误,但控制器内部的断点从未被命中,因此似乎没有任何变量通过。我在这个站点上看到了许多 JavaScript 问题,但找不到解决这种情况的问题。这是我的代码的样子,提前致谢!

JavaScript:

$("#calculate").click(function () {
        var $indicator = $("#Indicator");
        $.ajax({
            type: "POST", //THIS IS NEVER HIT, JUST SKIPPED OVER!
            url: '@Url.Action("LogPrices", "Sales")',
            data: {
                indicator: $indicator.val(), iD: $("#ID").val()
            },
            success: function (data) {
            // logic
        }
    });
});

控制器:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult LogPrices(bool indicator, long iD)
{
    // logic
    return Json(priceLog, JsonRequestBehavior.AllowGet);
}

【问题讨论】:

  • 您的 500 内部服务器错误是否有任何消息?
  • @Peter Rasmussen - 据我所知,没有什么用处。它说“POST [我的本地主机]/Sales/LogPrices 500(内部服务器错误)”
  • Url.Action in jquery ajax: Second parameter not passed 的可能重复项。里面说要在Html.Raw 中包裹Url.Action 以防止逃跑,这有帮助吗?
  • 先找出500错误背后的细节。 stackoverflow.com/questions/2640526/…
  • 谢谢大家 - 我会调查这两个链接并报告。

标签: javascript c# jquery ajax asp.net-mvc


【解决方案1】:

删除

[ValidateAntiForgeryToken]

此机制用于一些安全措施,如果您想使用它,请阅读它

基本上你必须将令牌发送给控制器,否则它会出错,因为安全措施失败 - 没有给出令牌 -

你可以添加这个

@Html.AntiForgeryToken()

然后将其作为表单提交,MVC 会自动处理并为您验证令牌

编辑: 缺少控制器操作的参数之一也可能导致 500,在您的情况下,应同时发送 ID 和指标,确保您的 html 正确检索值

通常我通过生成静态值来开始跟踪错误

【讨论】:

  • 我已经通过注释掉验证来测试这一点,但错误仍然存​​在。此外,@Html.AntiForgeryToken() 已添加到表单中,但此 AJAX 帖子按设计作为按钮而不是输入出现在整个表单提交之外。我将验证留在 Controller 中以提醒自己将其添加到 AJAX 调用中,如下所示:stackoverflow.com/questions/4074199/….
  • 在没有表单的情况下发送这个 ajax 不会发送令牌,但你是说即使没有它它仍然会给出错误?我尝试了你的确切代码并得到了 500,刚刚删除它并且它工作,尝试仔细检查你的控制器名称和动作名称,尝试放置静态 id 和指示器,我在我的调用中强制 (true,2) 并且它工作得很好跨度>
  • 使 ID 或指示符为 null 也会给出 500,确保您的 html 正确获取它们,尝试将常量值放入 ajax 中,看看它是否仍然失败,(保持 AntiForgeryToken 注释直到你确定),你可能会遇到不止一个问题
  • 我刚刚发现这是几乎同时的错误。未在表单上按要求设置必填字段。谢谢,如果你把这个写成另一个答案,我会把它标记为正确的!
  • 很高兴你解决了这个问题,我只是将这个添加到相同的答案中,以供未来阅读本文的人使用 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-22
  • 1970-01-01
  • 2020-05-23
  • 1970-01-01
  • 2020-03-07
  • 2012-07-07
相关资源
最近更新 更多