Come è possibile che Request.IsAjaxRequest () è il vero dal falso firefox ma da IE quando si utilizza posta jQuery

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

Domanda

sto cercando di post di prova jQuery. Vi metto un modulo e voglio aggiornare in ajax e sostituirlo con una forma di successo nel corso di un div (sembra un caso d'uso comune).

Il seguente codice funziona bene in Firefox, ma non in IE.

Un problema è che da Firefox Request.IsAjaxRequest () è vero, ma provenienti da IE, Request.IsAjaxRequest () è il ritorno false

Nota: ho messo in Thread.Sleep nella mia azione di controllo proprio come un test per assicurarsi che posso vedere che cosa sta succedendo

.

Ecco il mio codice vista:

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

 

ed ecco il codice 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>

e qui è la mia azione di controllo:

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


        Thread.Sleep(5000);
        return PartialView("EntryView", new MyViewModel());
    }
È stato utile?

Soluzione

I verificato che il codice (in cui sono stato in grado di trovare un errore) non è stato l'invio di una richiesta XHR con jQuery 1.3.2 e IE 6.0.2900.5512; l'aggiornamento jQuery per la prossima versione disponibile, 1.4.0, fissato il comportamento rotto. Con 1.4.0 (e superiori), IE post della form usando AJAX e invia il X-Requested-con intestazione richiesta per IsAjaxRequest() al lavoro. Siete in grado di eseguire l'aggiornamento jQuery? Non ho avuto alcuna fortuna trovare il bug specifico / correzione di questo, ma se avete bisogno di attaccare con 1.3.2, posso continuare a scavare.

Altri suggerimenti

Aggiungere il seguente codice, subito dopo il codice jQuery:

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

E 'costringe il browser per aggiungere il X-Requested-With di intestazione per ogni richiesta AJAX.

Da segnalare che utilizzando l'ultima versione di jQuery è raccomandato in quanto vi sono molte correzioni di bug.

Se non aiuta, si prega di ispezionare la richiesta con Fiddler per vedere se IE manda l'intestazione oppure no.

Sembra che ci sia un errore di javascript accadendo in IE che impedisce di chiamare l'azione in modo asincrono. Verificare la presenza del header HTTP X-Requested-With: XMLHttpRequest durante il debug.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top