Мы используем методы 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)
Кто-нибудь еще видел эту проблему? Если да, то нашли ли вы способ избежать этого?
Спасибо.