2009-04-23 21 views
14

Estoy trabajando en una secuencia de comandos para cargar algunas imágenes de forma asíncrona mediante jQuery.IE no desencadena el éxito de jQuery Ajax

Aquí es un fragmento de código de la función que carga las imágenes -

try{ 
    for(img in imgsArray){ 
     $.ajax({  
      async: false, 
      type: "get", 
      url:imgsArray[img], 
      success:function(imgFile){ 
       alert("success"); 
       //do something useful 
      }, 
      error:function(XMLHttpRequest,status,error){ 
       //do nothing 
      } 
     });//ajax 
    } 
} 
catch(e){ 
    //oops 
} 

He probado esto en Firefox, WebKit (Safari, Chrome) y funciona.

Las imágenes están en una carpeta en el servidor y estoy usando jQuery 1.3.

¿Alguna idea?

+0

Te presumo ya ha visitado la respuesta en Fiddler? ¿Qué ves ahí? –

+0

¿Se golpea la función de error? Debes poner un código allí para ver cuál es el error, si hay algo. – Damovisa

+0

, sí, agregue una alerta en su captura para ver si está arrojando un error. También puede querer cambiarlo por "OBTENER" y no por "obtener" –

Respuesta

16

Una solución simple de este problema es proporcionar la configuración de jQuery dataType : 'text' o dataType : 'xml' o dataType : 'json' o cualquier otro tipo de respuesta disponible.

Tuve el mismo problema, pero está funcionando bien después de especificar la configuración del tipo de datos en.llamada ajax

IE realmente no es un navegador inteligente, no asume la cadena de valor por defecto.

Pruébalo ... buena suerte.

0

Sugeriría usar Charles Proxy para ver qué está pasando, es decir, ¿está saliendo la solicitud? ¿Cuál es la respuesta?

Además, creo que podría haber alguna Excepción lanzada, ¿por qué no agrega algunas alertas en la sección Captura para ver qué sucede?

+0

He puesto declaraciones de alerta al comienzo y al final de la llamada ajax, así como dentro de las funciones de éxito y error. Todos dispararon excepto "éxito". Después de echar un vistazo a la respuesta con Fiddler, descubrí que IE solo obtenía 404 respuestas. Entonces, en Firefox hay 202 y 404 respuestas, pero solo 404 con IE. Creo que podría ser el modelo de seguridad de IEs y la configuración de mi servidor. – Peter

1

He estado teniendo problemas similares con IE y AJAX en los últimos días con mi servicio web JSONP. Incluso el error más pequeño en tu código puede hacer que todo se rompa en IE.

Probablemente lo mejor que se puede hacer es depurar la página en IE usando Visual Web Developer Express o Visual Studio. Aquí hay un tutorial de cómo hacerlo:

How to debug JavaScript with Visual Web Developer Express

Siga las instrucciones y tal vez colocar puntos de interrupción en el inicio de la petición AJAX.

Prueba estas cosas también:

  • Extracción "XMLHttpRequest" desde el campo de error, nunca lo han utilizado antes y mi código funciona bien;
  • Asegúrese de estar utilizando la última versión de jquery (1.3.2)?

Espero que lo hagas funcionar pronto!

+0

Gracias. Ese es un gran consejo para la depuración de IE especialmente para IE6-7. Aunque no soy partidario de la función de depuración de IE8, es un comienzo. La respuesta de error parece estar bien, simplemente no tendrá éxito. También me actualicé a la última versión de jQuery. Puede ser la configuración de mi servidor y los bloques de scripts de dominio cruzado de IE o algo así. Es una página web dinámica construida sobre puntales. Básicamente quiero probar si existe una imagen en esa url. – Peter

+0

Gracias por las sugerencias. – Peter

1

Al final tuve que crear una función separada para los navegadores IE.

El objetivo era poner a prueba para una imagen en el lugar por lo que el código se veía algo así como -

//get the images from the array 
for(img in imgsArray){ 

    if($.browser.msie){  
    /* DOM manipulation method */ 
    //IE has problems with ajax so try this instead 
    //create a new image object with unique ID 
    var testImg = $("<img/>"); 
    var imgID = "imgID"+img; 

    //hide it.. 
    testImg .css({ "visibility":"hidden" }); 
    testImg .attr("src",imgsArray[img]); 
    testImg .attr("id",imgID); 

    //.. and insert it into the DOM or else test will always fail 
    //because it does not exist as far as browser is concerned 
    $("body").append(testImg); 

    //test for image 
    if(document.getElementById(imgID).width > 60){ 
     //do something useful 
    } 
} 

No es realmente la respuesta a mi pregunta, pero es un trabajo funcional alrededor.

7

Tuve un problema similar: IE parece desencadenar un error si no puede analizar la respuesta como xml, incluso si la solicitud fue un éxito, por lo que si está solicitando una imagen, por ejemplo, volvería un xhr.status de 200 en el bloque de error.

Puse mi funcionalidad de "éxito" en el bloque de éxito para FF y en el bloque de error envuelto en un condicional "if (xhr.status == 200)".

+0

Ooo. . inteligente. Debería echarle otro vistazo a eso. Gracias – Peter

11

Intente configurar la opción en caché en falso.

$.ajax({   
      async: false, 
      cache: false, 
      type: "get", 
      url:imgsArray[img], 
      success:function(imgFile){ 
        alert("success"); 
        //do something useful 
        }, 
        error:function(XMLHttpRequest,status,error){ 
        //do nothing 
      } 
    });//ajax 
-1

Si utilizar el corrector de entrada si tiene una opción como "seleccionado", si no te es decir, no deje pasar este parámetro en función de ajax.

+0

¿Puedes proporcionar un ejemplo de código para ilustrar esto? –

3

utilice la siguiente etiqueta para apoyar navegadores

$ .support.cors = true;

1

conjunto 'cache: false' en el interior .ajax configuración funciona para mí :)

0

si el éxito es:

Success: function (data) { 
        if (data != null) { 
         alert(data); 
         ; 
        } 
       }, 

cambio para esto:

success: function (data, textStatus, XMLHttpRequest) { 
       alert(data.d); 
      } 
0

Otra cosa que pueda intente, muy parecido a la solución de John Saunders, intente con "jsonp" como el tipo de contenido, en lugar de json, para una respuesta esperada del tipo de datos json. Tuve que probar esto con IE para que desapareciera mi error, que era el código normal que funcionaba en cualquier otro navegador, excepto IE.

Aquí está mi código que funcionó:

$.ajax({ 
    url: request_url, 
    data: { var1: 'stuff' }, 
    dataType: "jsonp", 
    type: "get", 
    async: true, 
    cache: false, 
    success: function(collections) { 
     // handle result 
    } 
}); 

Saludos.

0

Llegué a esta pregunta con problemas similares. Y las respuestas anteriores arreglaron muchos de mis problemas. Sin embargo, hay un truco más que necesito hacer. No utilice

$.ajax({..., 
success: myfunc,...}); 

uso

$.ajax({..., 
success: myfunc(),...}); 
Cuestiones relacionadas