getJSON не работает, если у контроллера представления модели mvc есть параметр - PullRequest
0 голосов
/ 27 февраля 2010

У меня проблема с обратным вызовом. Я даже не получаю сообщение об ошибке в 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();
    }

Есть идеи? Похоже, это может быть связано, если не извините, я могу создать новую тему.

1 Ответ

1 голос
/ 27 февраля 2010

попробуйте установить возвращаемый результат в сигнатуре действия как JsonResult вместо ActionResult.

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

Если взглянуть дальше, я подозреваю, что проблема может быть связана с изменениями в GET вызовах результата JSON в MVC 2.

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

Как правило, вам нужно изменить вызов на $.post(), а AcceptVerbs указать POST вызов.

...