MVC3 jQuery getJSON不会发出调用

时间:2012-06-24 17:12:59

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

我正在尝试使用getJSON()调用来进行ajax工作。 当我导航到/ Home / GetWeather时,我在浏览器中返回Json数据。 但是jQuery调用不起作用。有任何想法吗? 当我将断点置于警报状态(“你好”)时,它从未命中。 在萤火虫中,我没有看到任何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>

我发现解决方案的原因已被删除???

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:3)

  • 请勿使用Asp.Net-MVC使用Url.Action
  • 对网址进行硬编码
  • 删除null参数。为什么需要将null发送给控制器?只是省略它。

获得正确路线的代码:

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

在剧本中:

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

答案 2 :(得分:1)

如果按钮是提交按钮或锚点,请确保取消该按钮的默认操作:

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

    return false; // <!-- cancel the default action of the button
});

同样正如@gdoron在他的回答中所说,永远不要硬编码这样的网址。始终使用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 helpers:

<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>

此外,您应该学会使用诸如FireBug之类的javascript调试工具,这使得检测这些错误成为一种平衡。如果您使用过FireBug,那么在请求这些脚本时您会看到404错误。