Как это возможно, что requep.isajaxrequest () верно из Firefox, но ложно от IE при использовании jQuery Post
-
24-09-2019 - |
Вопрос
Я пытаюсь проверить почту jQuery. Я выставляю форму и хочу обновить в Ajax и заменить с помощью формы успеха над Div (кажется общим применением).
Следующий код работает нормально в Firefox, но не в IE.
Одним из проблем является то, что из Firefox Request.isajaxrequest () правда, но идет от IE, Request.isajaxrequest () возвращает false.
ПРИМЕЧАНИЕ. Я положил в тему.
Вот мой код просмотра:
<div id="contact">
<form action="/Tracker/Add" method="post">
<fieldset id="inputbox">
<p>
<label>Today's number</label> <input class="inputText" id="weight" name="weight" type="text" value="208" /></p>
<p><label>Today's Date</label> <input class="inputText" id="datepicker" name="date" type="text" value="03-Mar-2010" /></p>
<p><input type="submit" value="Enter" /></p>
</fieldset>
А вот код JavaScript / jQuery:
<script type="text/javascript" src="../../Scripts/jquery/1.3.2/jquery-1.3.2.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$('#contact form').live('submit', function() {
//$("#Loading").fadeIn(); //show when submitting
$.post($(this).attr('action'), $(this).serialize(), function(data) {
$("#contact").replaceWith($(data));
});
return false;
});
});
</script>
А вот мой контроллер действий:
public ActionResult Add()
{
if (if (Request.IsAjaxRequest())
{
//firefox will hit this but IE wont
}
Thread.Sleep(5000);
return PartialView("EntryView", new MyViewModel());
}
Решение
Я проверил, что ваш код (в котором я не смог найти ошибку), не отправлял запрос XHR с jQuery 1.3.2 и IE 6.0.2900.5512; Обновление JQuery к следующей доступной версии, 1.4.0, исправило сломанное поведение. С 1.4.0 (и выше), то есть поставит форму, используя AJAX и отправляет запрошенный X-запрошенный заголовок для IsAjaxRequest()
работать. Вы можете обновить jQuery? Мне не повезло найти конкретную ошибку / исправить для этого, но если вам нужно придерживаться 1.3.2, я могу продолжать копать.
Другие советы
Добавьте следующий код, справа после кода jQuery:
jQuery.ajaxSetup({
beforeSend: function(xhr) {
xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
}
});
Это заставляет браузер добавить X-запрошенный - с Заголовок для каждого запроса AJAX.
Стоит отметить, что использование новейшей версии jQuery рекомендуется, поскольку есть много исправлений ошибок.
Если это не поможет, пожалуйста, проверьте запрос с Соревнование чтобы увидеть, если IE отправляет заголовок или нет.
Похоже, что в IE есть ошибка JavaScript, которая предотвращает вызов действия асинхронно. Проверьте наличие заголовка HTTP X-Requested-With: XMLHttpRequest
при отладке.