如果 mvc 模型视图控制器有参数,getJSON 不起作用

发布于 2024-08-23 13:13:14 字数 878 浏览 3 评论 0原文

我在回调方面遇到问题。我什至在 Firebug 中没有收到错误。如果我在 getjson 调用之前和之后发出警报,两个警报都会显示,但 getjson 调用不会触发。

public ActionResult TestPage()
    {

        return View();
    }

public ActionResult LoadMapLonLats(int mapId)
    {
        //some code
        return Json(_myMaps);
    }


$("#Search").click(function() {
        $.getJSON("LoadMapLonLats", { mapId: 73 }, loadDbMap);
    });

    function loadDbMap(maps) {
        alert('m');
        $.each(maps, function(i) {
            alert(maps[i]);
        });
    }

只要我离开 TestPage 不带参数就可以了。如果我向 TestPage(int id) 添加参数,则对 LoadMapLonLats 的回调不起作用。看起来很奇怪。当然,TestPage 是我正在加载的页面,因此在渲染页面之前我需要在这里做一些工作。不确定为什么向视图添加参数会破坏对另一个函数的回调。

//this breaks he callback to LoadMapLonLats

public ActionResult TestPage(int id)
    {

        return View();
    }

有什么想法吗?看来这可能是相关的,如果不抱歉我可以发布一个新线程。

I'm having an issue with a callback. I'm not even getting an error in Firebug. If I alert before and after the getjson call both alerts show but the getjson call doesn't fire.

public ActionResult TestPage()
    {

        return View();
    }

public ActionResult LoadMapLonLats(int mapId)
    {
        //some code
        return Json(_myMaps);
    }


$("#Search").click(function() {
        $.getJSON("LoadMapLonLats", { mapId: 73 }, loadDbMap);
    });

    function loadDbMap(maps) {
        alert('m');
        $.each(maps, function(i) {
            alert(maps[i]);
        });
    }

As long as I leave TestPage without a parameter is works. If I add a parameter to TestPage(int id) then the call back to LoadMapLonLats doesn't work. Seems odd. Of course TestPage is the page I'm loading so I need to do some work here before rendering the page. Not sure why adding a parameter to the view would break the callback to another function.

//this breaks he callback to LoadMapLonLats

public ActionResult TestPage(int id)
    {

        return View();
    }

Any ideas? Seems like this may be related, if not sorry I can post a new thread.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

萌无敌 2024-08-30 13:13:14

尝试将操作签名中的返回结果设置为 JsonResult 而不是 ActionResult

    public JsonResult LoadMapLonLats(int mapId)
    {
        //some code
        return Json(_myMaps);
    }

进一步研究一下,我怀疑这个问题可能与 MVC 2 中对 JSON 结果的 GET 调用的更改有关。

http://haacked.com/archive/2009/06/25/json-hijacking.aspx

基本上你需要更改调用 $.post() 并让 AcceptVerbs 指定 POST 调用。

try setting the return result in the action signature as a JsonResult instead of an ActionResult.

    public JsonResult LoadMapLonLats(int mapId)
    {
        //some code
        return Json(_myMaps);
    }

Having a further look at this, I suspect the issue could be related to the changes regarding GET calls to a JSON result in MVC 2.

http://haacked.com/archive/2009/06/25/json-hijacking.aspx

Basically you need to change the call to $.post() and have the AcceptVerbs specify a POST call.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文