【问题标题】:Ajax Request returns HTTP error 500, using MVC and $.ajax call with POST?Ajax 请求返回 HTTP 错误 500,使用 MVC 和 $.ajax 调用与 POST?
【发布时间】:2012-12-06 05:02:38
【问题描述】:

我已经看过几个关于这个的帖子,我已经尝试了所有的答案 (ASP.NET MVC JsonResult return 500)

我的 ajax 请求重新返回 500 内部错误。如果我调试,我什至不会采取行动。

这是我的 ajax 调用:

$.ajax({
                    url: '@Url.Action("UpdateSortOrder", "FormItems")',
                    data: { itemToUpdateId: item.attr("id"), newParentItemId: parentItemId, newPreviousItemId: previousItemId },
                    type: 'POST',
                    success: function (data) {
                        console.log(data);
                    },
                    error: function (xhr, status, exception) {
                        console.log("Error: " + exception + ", Status: " + status);
                    }
                });

我的行动:

[HttpPost]
    public ActionResult UpdateSortOrder(Guid itemToUpdateId, Guid newParentItemId, Guid newPreviousItemId)
    {
        FormItem updatedItem = _formItemService.GetOne(x => x.Id == itemToUpdateId);

        return Json(updatedItem, JsonRequestBehavior.DenyGet);
    }

使用 chrome 控制台,这些是来自回复的响应标头:

HTTP/1.1 500 内部服务器错误 缓存控制:私有 内容类型:文本/html;字符集=utf-8 服务器:Microsoft-IIS/7.5 X-AspNetMvc-版本:3.0 X-AspNet-版本:4.0.30319 X-Powered-By: ASP.NET 日期:格林威治标准时间 2012 年 12 月 18 日星期二 21:53:41 内容长度:17041

服务器日志不显示子状态代码。知道我在这里做错了什么吗?我更喜欢使用 POST 而不是 GET。

表单数据显示为:

itemToUpdateId:18ac5399-342e-4a39-9da1-3281a89501df

newParentItemId:null

newPreviousItemId:null

哪个是正确的。

我已经尝试将 contentType 设置为 application/json 和 traditional = true 就像这个问题一样:Sending ajax post to mvc with "application/json; charset=utf-8" returns error 500 from vs web developer server

同样的错误。

【问题讨论】:

  • 您是否尝试过使用 Fiddler 查看原始 POST 以了解网络中发生了什么?
  • 您能分享一下您是如何设置路线的吗?
  • 路线正常,现在它只是使用通过添加区域填充的默认路线规则。如果我将操作更改为返回视图并输入 URL,它将起作用,因此路由正在正确处理。
  • @BiffMaGriff 我是从 Chrome 发布的,但由于再次检查了该窗口,我现在明白了,如果我在 chrome 控制台中检查 POST 的“预览”选项卡,它给了我实际的错误,即在操作中返回的 formItem 存在循环引用错误!

标签: asp.net-mvc jquery asp.net-ajax


【解决方案1】:

好吧,我能够找出问题所在,我的 AJAX 语法甚至操作都没有问题。只是我返回的对象包含循环引用。通过单击“网络”选项卡下的 POST 请求,然后查看预览选项卡,我能够在 chrome 控制台中看到实际错误。这显示了实际的错误消息。

【讨论】:

  • 能够在 IE11 开发人员工具中使用网络选项卡 > 详细信息 > 响应正文进行类似的故障排除。
  • 对于其他仍有问题的人,请查看此solution。它提供了 Fiddler 等无法提供的更详细的错误。
  • 第三次我用谷歌搜索了这个答案的瑰宝 - 必须记住! (以前投票过)
  • 在我的情况下,我返回了一个不存在的视图,而我应该返回 JSON。抛出 500 的愚蠢错误。如果您在任何浏览器中使用网络选项卡,您将清楚地看到来自 asp.net 的错误。
【解决方案2】:

旧帖子,替代答案...以防万一有人在这里结束..

我的问题是由于我调用的控制器操作返回了 Partial View Action Result 并且 PartialView .cshtml 文件没有发布到服务器上(发布时没有“包含”在 Visual Studio 项目中) )。

【讨论】:

    【解决方案3】:

    Fiddler 是一个很好的捕获 http 请求的工具,对于调试客户端和服务器端之间的响应非常有用。当您怀疑浏览器中的问题时打开它,当错误发生时打开 fiddler 并选择请求,然后查看其原始信息。

    【讨论】:

      【解决方案4】:

      如果您不需要成功更新项目,则不要返回它,只返回一个简单的变量

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-24
        相关资源
        最近更新 更多