【问题标题】:Is there a way to detect why an Ajax call does not make it to a controller in MVC?有没有办法检测为什么 Ajax 调用没有到达 MVC 中的控制器?
【发布时间】:2019-09-19 20:45:36
【问题描述】:

当我单击一个按钮时,我正在尝试进行 AJAX 调用。我的程序应该向服务器发送请求以获取一些数据并将其显示在页面上。为了简单起见,我首先需要了解如何使 AJAX 调用正常工作。我尝试了以下方法:

我在 ASP.Net MVC5 C# 中的控制器:

[HttpPost]
public string MyMethod(int somePara)
{
    return "it worked";
}

我的 AJAX 调用:

$("button#test").on("click", function() {
  $.ajax({
    type: "POST",
    url: loc + "/MyMethod",
    data: somePara = "",
    success: function(data) {
      alert(data);
    },
    error: function() {
      alert("Error")
    }
  });
});
<link href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
<button class="btn btn-default btn-lg btn-block" id="test">
    <span class="glyphicon glyphicon-time"></span>
    Test
</button>

(AJAX 调用中的 loc 字段将定义我的控制器。)

当我在本地运行此代码时,我的 AJAX 调用将返回错误部分。

我应该改变什么?有没有办法可以检测到为什么会发生这种情况?

【问题讨论】:

  • 是的,检查你的控制台
  • 它会说POST https://localhost:[portnumber]/MyController/MyMethod 500@JuniusL。
  • 这是内部服务器错误,这意味着您的后端发生了一些事情
  • 请先记录您的网址并检查是否正确
  • 'data: somePara = "",' 对我来说看起来不正确,你不应该把它串起来吗?或者至少把它放在 json 上下文中

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


【解决方案1】:

您的请求问题

  • 数据格式不正确somePara = "111" => JSON.stringify({ somePara: "111" }),

  • 没有定义数据类型

    contentType: "application/json; charset=utf-8", 数据类型:“json”,

  • 操作未返回 JSON 格式。

控制器动作

  [HttpPost]
    public JsonResult MyMethod(int somePara)
    {
        return Json("it worked", JsonRequestBehavior.AllowGet);
    }

AJAX

 $("button#test").on("click", function () {


       $.ajax({
                    type: "POST",
                    url:  "/Home/MyMethod", // i try home controller
                    data: JSON.stringify({ somePara: "111" }),
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    success: function (data) {
                        alert(data);
                    },
                    error: function () {
                        alert("Error")
                    }
                });
            });

更新:操作应更改为 MyMethod(int? somePara) 以防止 somePara : "" 无法转换为 int。

【讨论】:

  • 没有必要使用JSON.stringifydata: 只需使用和反对: 而不是=: data: { somePara : "" },
  • 是的,在这种情况下我们可以使用数据:{ somePara : "" }
  • 当我使用上面完全相同的代码时,它会不断返回内部服务器错误,但是当我删除参数时,它工作正常。如何发送参数而不出现此错误?
  • 为了防止出错,你应该使用 int? MyMethod(int?somePara) 防止
  • 我不知道是什么导致了这个问题,但是重新复制整个事情,将它粘贴到我的解决方案中并比较我没有找到任何东西的代码,神奇的是它现在正在工作。所以不要介意我的最后评论。
猜你喜欢
  • 1970-01-01
  • 2019-04-12
  • 2010-11-19
  • 1970-01-01
  • 2023-04-04
  • 2013-02-04
  • 2019-02-22
  • 2019-12-17
  • 1970-01-01
相关资源
最近更新 更多