ASP.NET MVC3 & jquery.getJSON не делает запрос - PullRequest
1 голос
/ 20 февраля 2012

Я работаю на сайте MVC 3, и все работало до тех пор, пока я не обновился до jquery1.7.1 с помощью nuget. Теперь мои вызовы $ .getJSON не отправляют запрос на сервер. Fiddler не показывает запрос на сервер и код до и после выполнения $ .getJSON. Любые идеи будут оценены.

Вот пример клиентского скрипта:

var srvBaseUrl = "http://localhost:15627/Home/";
$.getJSON(srvBaseUrl + "GetInfo", { 'id': 1 }, function (allData) {
      alert(allData);
});

и соответствующий код сервера:

[HttpGet]
public ActionResult GetInfo(int id)
{
    return Json(id, JsonRequestBehavior.AllowGet);
}

Я проверил, работает ли код сервера при создании запроса в Fiddler.

Ответы [ 2 ]

2 голосов
/ 20 февраля 2012

У меня была похожая проблема, оказалось, что JQuery кеширует результаты.Это объясняет ваши комментарии выше, что он начал работать после того, как вы внесли изменения.

Если вы посмотрите на http://api.jquery.com/jQuery.getJSON/,, вы увидите, что $.getJSON это просто сокращение для

$.ajax({
  url: url,
  dataType: 'json',
  data: data,
  success: callback
});

Если вы используете $.ajax вместо сокращения $.getJSON, вы можете отключить кэширование с помощью параметра cache, то есть вы сможете заменить свой код на:

$.ajax({
  url: srvBaseUrl + "GetInfo",
  dataType: 'json',
  data: { 'id': 1 },
  success: function (allData) { alert(allData); },
  cache: false
});
1 голос
/ 20 февраля 2012

Nuget не собирается обновлять файл Views/Shared/_Layout.cshtml с обновленной ссылкой на последнюю установленную версию jQuery. Вам нужно будет обновить это самостоятельно:

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

EDIT

Предполагая, что все в порядке, как вы сказали, убедитесь, что ваш вызов getJSON находится внутри функции готовности документа, так как он работает для меня как есть. Однако я бы изменил способ создания URL-адреса для использования вспомогательного метода:

<script type="text/javascript">
    (function ($) {
        $.getJSON('@Url.Action("GetInfo")', { 'id': 1 }, function (allData) {
            alert(allData);
        });
    })(jQuery);
</script>

Это хорошо протестировано в стандартном шаблонном проекте ASP.NET MVC3 Internet Application, использующем действие контроллера как есть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...