JQuery GET, а также POST с IE - PullRequest
       3

JQuery GET, а также POST с IE

1 голос
/ 13 января 2012

Мы используем методы jQuery.ajax () для запроса данных сервера на нескольких страницах нашего веб-сайта MVC 3. Эти запросы всегда помечаются типом параметра ajax 'POST' и обычно вызываются при загрузке страницы или, возможно, по таймеру, то есть они не являются результатом действий пользователя (например, щелчка мышью).

Когда мы смотрим на журнал ошибок (Elmah), мы видим ряд записей следующим образом:

Метод открытого действия «GetMessageStats» не найден в контроллере «Inbox.WebUI.Areas.Application.Controllers.StatusController».

Действие контроллера помечено [HttpPost], например,

[HttpPost]
public JsonResult GetMessageStats()
{
   MessageStatsViewModel model = new MessageStatsViewModel
   {
      TotalNoMessages = MailDB.GetMessageCount(),
      MessagesInQueue = MailDB.GetQueueLength()
   };

   return Json(model);
}

и вот вызывающий клиентский скрипт:

$(function() {
   var $totalMessages = $("#total-messages"),
       $queuedMessages = $("#queued-messages");

   function getStats() {
      $.ajax({
         type: "POST",
         url: "/Application/Status/GetMessageStats",
         dataType: "json",
         cache: false,
         success: function (data) {
            $totalMessages.text(data.TotalNoMessages);
            $queuedMessages.text(data.MessagesInQueue);
            setTimeout(function() {
               getStats();
            }, 15000);
         },
         error: function (xmlHttpRequest, errorMessage, exception) {
            throw errorMessage;
         }
      });
   }

   getStats();

});

При расследовании выясняется, что некоторые браузеры (IE7 / IE8, но, возможно, другие), похоже, выдают запрос GET в дополнение к необходимому запросу POST. Следует отметить, что пользовательский интерфейс отвечает и ведет себя корректно в этих браузерах, поэтому POST-запрос обслуживается.

Эльма сообщает агенту пользователя как:

Mozilla / 4.0 (совместимо; MSIE 6.0; Windows NT 5.1)

Кто-нибудь еще видел эту проблему? Если да, то нашли ли вы способ избежать этого?

Спасибо.

Ответы [ 4 ]

3 голосов
/ 19 января 2012

Что бы это ни стоило, по поводу лишнего GET, я обнаружил, что есть несколько панелей инструментов / служб безопасности, которые «проверяют» URL-адреса, чтобы убедиться, что они действительны.Я полагаю, что это был TrendMicro, у которого был плагин типа Web of Trust, который перепрашивал сайты, чтобы проверить их на наличие вредоносных программ.

Вы пытались использовать сокращенные методы ajax, такие как $ .post ()?Кроме того, если вы получаете данные, есть ли конкретная причина, по которой вам нужен POST?

Если вы генерируете запрос через Fiddler или предпочитаемый вами инструмент, вы получаете ту же ошибку в ответе?*

0 голосов
/ 25 января 2012

Однажды у меня была похожая проблема.Для меня было решение добавить еще одно значение:

processData: false

к вызову jQuery ajax.

0 голосов
/ 21 января 2012

Метод, который вы используете в своем коде JavaScript, является методом GET.Поэтому попробуйте удалить [HttpPost] из метода действия контроллера.

Или, чтобы сделать его методом публикации, передать данные публикации следующим образом.

url: "/Application/Status/GetMessageStats",
data: {},
dataType: "json",

Попробуйте это.Не проверено ..

0 голосов
/ 14 января 2012

Очевидно, это происходит, когда у вас есть другая функция, которая изменяет URL и добавляет параметр GET.Если это произойдет, то IE имеет тенденцию посылать запросы GET и POST.

Возможно, это может быть функция ajaxSend, которая является функцией jQuery, вызываемой перед отправкой запроса ajax.1004 * Решение состоит в том, чтобы не изменять URL-адрес напрямую, а передавать любые дополнительные параметры, которые необходимы в запросе.

Информация взята из: http://www.justinball.com/2009/07/08/jquery-ajax-get-in-firefox-post-in-internet-explorer/

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