Как это возможно, что Request.IsAjaxRequest () истина из Firefox, но ложь из IE при использовании поста jquery - PullRequest
2 голосов
/ 03 марта 2010

Я пытаюсь проверить JQuery сообщение. Я публикую форму и хочу обновить ее в ajax и заменить ее формой успеха на div (кажется, что это обычный случай).

Следующий код прекрасно работает в Firefox, но не в IE.

Одна проблема заключается в том, что из Firefox Request.IsAjaxRequest () имеет значение true, но исходит от IE, Request.IsAjaxRequest () возвращает false

ПРИМЕЧАНИЕ: я вставил Thread.Sleep в действие моего контроллера просто как тест, чтобы убедиться, что я могу видеть, что происходит.

Вот мой код просмотра:

 <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());
    }

Ответы [ 3 ]

8 голосов
/ 06 марта 2010

Я подтвердил, что ваш код (в котором я не смог найти ошибку) не отправлял запрос XHR с jQuery 1.3.2 и IE 6.0.2900.5512; Обновление jQuery до следующей доступной версии, 1.4.0, исправило некорректное поведение. В версии 1.4.0 (и выше) IE публикует форму с использованием AJAX и отправляет заголовок X-Requested-With, необходимый для работы IsAjaxRequest(). Вы можете обновить JQuery? Мне не повезло найти конкретную ошибку / исправление для этого, но если вам нужно придерживаться 1.3.2, я могу продолжать копать.

3 голосов
/ 06 марта 2010

Добавьте следующий код сразу после кода jQuery:

jQuery.ajaxSetup({
    beforeSend: function(xhr) {
        xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
    }
});

Это заставляет браузер добавлять заголовок X-Requested-With для каждого запроса AJAX.

Стоит отметить, что рекомендуется использовать новейшую версию jQuery, поскольку существует множество исправлений ошибок.

Если это не поможет, проверьте запрос с помощью Fiddler , чтобы узнать, отправляет ли IE заголовок или нет.

2 голосов
/ 03 марта 2010

Похоже, что в IE происходит ошибка JavaScript, которая препятствует асинхронному вызову действия. Проверьте наличие HTTP-заголовка X-Requested-With: XMLHttpRequest во время отладки.

...