Wie ist es möglich, dass Request.IsAjaxRequest () von Firefox wahr ist aber falsch von IE, wenn Jquery Beitrag mit

StackOverflow https://stackoverflow.com/questions/2371921

Frage

ich versuche zu Test jquery Beitrag. Ich bin ein Formular veröffentlichen und will in Ajax aktualisieren und mit einer Erfolg Form über einen div (scheint wie ein häufiger Anwendungsfall) ersetzen.

Der folgende Code funktioniert in Firefox aber nicht im Internet Explorer.

Ein Problem ist, dass von Firefox Request.IsAjaxRequest () wahr ist, aber kommt von IE, Request.IsAjaxRequest () kehrt false

Hinweis: put i in der Thread.Sleep in meiner Controller-Aktion nur als Test, um sicherzustellen, ich kann was sehen los

.

Hier ist meine Ansicht Code:

 <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>

 

und hier ist die Javascript / jQuery-Code:

<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>

und hier ist meine Controller-Aktion:

    public ActionResult Add()
    {
         if (if (Request.IsAjaxRequest())
         {
                  //firefox will hit this but IE wont
          }


        Thread.Sleep(5000);
        return PartialView("EntryView", new MyViewModel());
    }
War es hilfreich?

Lösung

ich festgestellt, dass Ihr Code (in dem ich nicht in der Lage, einen Fehler zu finden) nicht eine XHR Anfrage mit jQuery 1.3.2 und IE 6.0.2900.5512 zu senden; Upgrade jQuery auf die nächste verfügbare Version, 1.4.0, das gebrochene Verhalten festgelegt. Mit 1.4.0 (und höher), IE Beiträgen der Form unter Verwendung von AJAX und sendet die X-Requested-With-Header erforderlich für IsAjaxRequest() an der Arbeit. Sind Sie in der Lage jQuery zu aktualisieren? Ich habe kein Glück den spezifischen Fehler / fix für diese zu finden, aber wenn man mit 1.3.2-Stick benötigt, kann ich halten zu graben.

Andere Tipps

Fügen Sie den folgenden Code direkt nach dem jQuery-Code:

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

Es zwingt den Browser, um das X-Requested-With Header für jede AJAX Anfrage hinzuzufügen.

Bemerkenswert, dass die neueste Version von jQuery wird empfohlen, da es viele Fehlerbehebungen sind.

Wenn es nicht hilft, überprüfen Sie bitte die Anfrage mit Fiddler zu sehen, ob IE den Header sendet oder nicht.

Es sieht aus, als gäbe es ein Javascript-Fehler im IE geschieht aus der verhindert, asynchron Aufruf der Aktion. Überprüfen Sie das Vorhandensein des HTTP-Headers X-Requested-With: XMLHttpRequest beim Debuggen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top