¿Cómo es posible que Solicite.IsAjaxRequest() que es la verdad de firefox, pero en falso, es decir, cuando el uso de jquery post

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

Pregunta

yo estoy tratando de probar jquery post.Estoy publicando una forma y desea actualizar en el ajax y reemplazar con éxito el formulario de más de un div (parece un caso de uso habitual).

El siguiente código funciona bien en firefox pero no en IE.

Un problema es que desde Firefox Solicitud.IsAjaxRequest() es cierto, pero viniendo de IE, Solicitud.IsAjaxRequest() es devolver false

NOTA:he puesto en el Hilo.Dormir en mi controlador de acción sólo como una prueba para asegurarse de que puede ver lo que pasa.

Aquí está mi código de la 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>

y aquí está el javascript / jquery código:

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

y aquí está mi controlador de acción:

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


        Thread.Sleep(5000);
        return PartialView("EntryView", new MyViewModel());
    }
¿Fue útil?

Solución

I verificado que el código (en el que yo era incapaz de encontrar un error) no estaba enviando una solicitud XHR con jQuery 1.3.2 y IE 6.0.2900.5512; actualización jQuery para la próxima versión disponible, 1.4.0, fija el comportamiento erróneo. Con 1.4.0 (y superiores), mensajes decir, la forma utilizando AJAX y envía el X-Requested-With cabecera requerida para IsAjaxRequest() al trabajo. ¿Es capaz de actualizar jQuery? No he tenido un poco de suerte encontrar el error específico / solución para esto, pero si es necesario palo con 1.3.2, puedo seguir cavando.

Otros consejos

Agregue el código siguiente, justo después de código jQuery:

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

Se obliga al navegador para añadir el X-Pidió-Con encabezado para cada petición AJAX.

Vale la pena destacar que el uso de la última versión de jQuery es recomendable, ya que hay muchas correcciones de errores.

Si esto no ayuda, por favor revise la solicitud con Fiddler a ver si IE envía el encabezado o no.

Parece que hay un error de JavaScript sucediendo en IE que impide llamar a la acción de forma asíncrona. Verificar la presencia de la cabecera HTTP X-Requested-With: XMLHttpRequest durante la depuración.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top