【问题标题】:MVC3 jQuery getJSON doesnt issue a callMVC3 jQuery getJSON 不发出调用
【发布时间】:2012-06-24 17:12:59
【问题描述】:

我正在尝试使用 getJSON() 调用使 ajax 工作。 当我导航到 /Home/GetWeather 时,我会在浏览器中返回 Json 数据。 但是 jQuery 调用不起作用。有任何想法吗? 当我在警报(“Hello”)上设置断点时,它从未命中。 在萤火虫中,我没有看到任何 ajax 调用。有什么想法吗?

$(document).ready(function() {
    $("#Button1").click(function() {
        $.getJSON("/Home/GetWeather", null, function(data) {
            alert("Hello");
        });
    });
});​

控制器代码

public class HomeController : Controller
{
    //
    // GET: /Home/

    public ActionResult Index()
    {
        return View();
    }

    public JsonResult GetWeather()
    {
        List<Weather> weather = new List<Weather>();

        // populate weather with data

        return Json(weather, JsonRequestBehavior.AllowGet);
    }
}

查看:

@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <title>Index</title>
    <script src="../../Scripts/jquery-1.5.1.min.js" type="text/javascript"></script>
    <script src="../../Scripts/jquery-1.5.1-vsdoc.js" type="text/javascript"></script>
    <script type="text/javascript">

        $(document).ready(function () {

            $("#Button1").click(function () {
                $.getJSON("/Home/GetWeather", null, function (data) { //I hit breakpoint here, but in firebug I dont see any call, nothing
                    alert("Hello"); // Breakpoint here doesnt hit :(
                });
            });

        });

    </script>
</head>
<body>
    <input id="Button1" type="button" name="Button1" value="Get Weather" />
    <div id="Weather"></div>
</body>
</html>

我找到的解决方案被删除的任何原因???

【问题讨论】:

  • 控制器的正确路径?可能类似于../Home/GetWeather。此外,您可以从通话中删除 null
  • 检查您对同源策略没有任何问题。见:stackoverflow.com/questions/2538215/…
  • @CharlieKilian。他正在向控制器发送数据,他怎么会违反同源策略?
  • 您是否在 firebug 或 chrome 开发工具中遇到任何错误?你是否包含了 jquery.js?是#Button1 锚标签吗?
  • 现在您更新您的问题...?第一次你真的应该写一个答案,你编辑你的问题......请这样做。

标签: jquery asp.net-mvc asp.net-mvc-3 getjson


【解决方案1】:

据我所知,您正在尝试将其称为跨域。让代码跑出站点的域。在我让 html 文件调用从 localhost 运行的 json 之前,它确实没有返回任何内容。但是把那个html放到同一个地方,从localhost调用它就可以了。

【讨论】:

    【解决方案2】:
    • 不要用Asp.Net-MVC 硬编码URL 使用Url.Action
    • 删除null 参数。为什么需要向控制器发送null?省略它。

    获取正确路径的代码:

    @Url.Action("GetWeather", "Home")
    

    脚本内部:

    $("#Button1").click(function () {
        $.getJSON("@Url.Action("GetWeather", "Home")", function (data) {
            alert("Hello");
        });
    });
    

    【讨论】:

    • 有null还是没有null都没有区别。我不需要 Url.Action,我在同一个 MVC 应用程序中使用 jQuery All。
    • @Sigourney_Weaver。对了,为什么要保留它?!三个点
    • 正如我所说,它不会改变任何东西,好的,如果你愿意,我将其删除,同样的问题。
    • 正如我所说,在浏览器中导航 /Home/GetWeather 时,我会返回 JSON 数据。 firebug 没有错误。
    • 实际上,正如我所说,我没有看到在萤火虫中进行的调用。我不知道为什么,它应该非常简单,就像教程中一样。
    【解决方案3】:

    如果按钮是提交按钮或锚点,请确保通过返回 false 取消按钮的默认操作:

    $("#Button1").click(function() {
        $.getJSON("/Home/GetWeather", null, function(data) {
            alert("Hello");
        });
    
        return false; // <!-- cancel the default action of the button
    });
    

    正如@gdoron 在他的回答中所说,永远不要对这样的网址进行硬编码。始终使用 url 助手来生成它们。


    更新:

    现在您已经展示了您的视图,我可以看到您已将 url 硬编码到您的脚本中:

    <script src="../../Scripts/jquery-1.5.1.min.js" type="text/javascript"></script>
    <script src="../../Scripts/jquery-1.5.1-vsdoc.js" type="text/javascript"></script>
    

    你应该never do this。您应该始终使用 url 助手:

    <script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/jquery-1.5.1-vsdoc.js")" type="text/javascript"></script>
    

    您还应该学习使用 javascript 调试工具,例如 FireBug,它可以让检测这些错误变得轻而易举。如果您使用过 FireBug,您在请求这些脚本时会看到 404 错误。

    【讨论】:

    • 但是他提到他在 FireBug 中没有看到请求,如果这是问题,他应该看到它,不是吗?
    • 他没有看到它,因为他被重定向了,甚至没有时间启动 AJAX 请求。不幸的是,由于 OP 没有展示他的观点,我们只能猜测是否是这种情况。
    • 也许,我在等着看他的看法。如果这是问题所在,他应该告诉我们他正在使用锚点重定向...... :(
    • 没有重定向,它不是提交按钮。
    • 那么代码应该可以工作,如果不行,FureBug 会告诉你原因。
    猜你喜欢
    • 2013-05-17
    • 2011-10-19
    • 2012-02-21
    • 2013-09-07
    • 1970-01-01
    • 2011-06-12
    • 2011-01-17
    • 2011-07-22
    • 2023-03-04
    相关资源
    最近更新 更多