【问题标题】:get request in ajax to controller action does not work?在 ajax 中获取对控制器操作的请求不起作用?
【发布时间】:2012-04-30 11:14:42
【问题描述】:

我正在尝试在 asp.net mvc 3 中执行 ajax get 请求。它不起作用,即 GetSquareRoot 操作未命中?

index.cshtml

   @{
    ViewBag.Title = "Home Page";
}
<h2>@ViewBag.Message</h2>
<p>
    To learn more about ASP.NET MVC visit <a href="http://asp.net/mvc" title="ASP.NET MVC Website">
        http://asp.net/mvc</a>.
</p>
<script type="text/javascript">
        function calculateSquareRoot(numberToCalculate) {
            $.ajax({
                type: 'Get',
                url: '/Home/GetSquareRoot',
                data: { number: numberToCalculate },
                success: function (data) { alert(data.result); }
            });
        }

</script>
<button onclick="calculateSquareRoot(9);">Calculate Square</button>

在家庭控制器上:

public JsonResult GetSquareRoot(long number)
{
    var square = Math.Sqrt(number);
    return Json(new { result = square }, JsonRequestBehavior.AllowGet);
}

【问题讨论】:

  • “不起作用”不是对您的问题的描述。如何提供有关错误的信息、服务器如何响应(Firebug 可以很方便)等?
  • 看帖:动作未命中
  • 我确实读过它。该编辑是在我发表评论之后进行的。
  • 尝试删除 ajax 调用中的 type:'Get',
  • 在萤火虫中检查值是否已发布?

标签: c# asp.net-mvc-3 jquery


【解决方案1】:

如果我在 localhost 上挂载以下页面:

<!DOCTYPE html>
<html>
    <head>
        <script type="text/javascript" 
           src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.js">
        </script>
        <script type="text/javascript">
        //<![CDATA[
            function calculateSquareRoot(numberToCalculate) {
                $.ajax({
                    type: 'GET',
                    url: '/Home/GetSquareRoot',
                    data: { number: numberToCalculate },
                    success: function (data) { alert(data.result); }
                });
            }
        //]]>
        </script>
    </head>
    <body>
        <button onclick="calculateSquareRoot(9);">Calculate Square</button>
    </body>
</html>

当我点击按钮时,我看到一个请求发给:

http://localhost/Home/GetSquareRoot?number=9

你确定你已经告诉我们整个故事了吗?

【讨论】:

  • 它是 jquery 脚本参考,即使它显示在 f12 开发人员工具中:(
【解决方案2】:

不确定这是否有帮助,但文档指出类型参数应为 GET... 而不是 Get

【讨论】:

    【解决方案3】:

    我认为你的 jQuery ajax 很好。但是我发现你的按钮标签是错误的。

    原样

    <button onclick="calculateSquareRoot(9);">Calculate Square</button>
    

    未来

    <button type="button" onclick="calculateSquareRoot(9);">Calculate Square</button>
    

    希望对你有所帮助。

    卢克。

    【讨论】:

      【解决方案4】:
      1. 在网络选项卡的开发人员工具 (F12) 中检查请求。 看看会发生什么,如果它通过参数进入正确的控制器/动作
      2. 将数字类型更改为 int 而不是 long(可能 ModelBinder 难以绑定到 long(不太可能)
      3. 在 ajax 调用中添加错误函数:

           $.ajax({
                type: 'GET',
                url: '/Home/GetSquareRoot',
                data: { number: numberToCalculate },
                success: function (data) { alert(data.result); },
                error: function (jqXHR, textStatus, errorThrown) { debugger;/*see what happened */ }
            });
        

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-03-04
        • 1970-01-01
        • 1970-01-01
        • 2017-09-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多