2009-11-28 17 views
6

Estoy tratando de depurar la razón por la que mi ajax GET/POST no está funcionando en IE 7/8jQuery AJAX no funciona en IE 7/8

Aquí mi código:

$.ajax({type: "POST", dataType:'html',url: "/places/set_member/add/",data: "place_id="+place_id , 
         beforeSend: function() {$("<span class='notice'>Saving...</span>").prependTo('body');}, 
         success: function(){ 
         $.ajax({type:"GET",url:url,success:function(html){$('div.place-list .ui-tabs-panel').html(html);},complete:function(){resetAddThis();}}) 
         }, 
       complete: function() { 
          $('span.notice').fadeOut(500); 
       $('span.notice').remove(); 
          }}); 

Ahora bien, este funciona bien en FF Safari Win/Mac pero no en IE 7/8

He descargado el violín y he visto las llamadas, se supone que el script envía datos al servidor y luego vuelve a cargar el HTML que ahora tiene nueva información actualizada. Lo que está sucediendo es que la primera llamada recibe un error 500 pero, luego de que se recargó el html, y se repite la misma acción, se enviará, con 200 ms, por lo que da la apariencia de que no está guardando, lo que hace solo en el segundo intento

¿Hay algo que estoy haciendo mal, o algo tengo que añadir? Este es un bucle php por lo que esta función se aplica al mismo enlace en 20-30 elementos en la página.

+0

Por qué estás haciendo 2 llamadas ajax? Cuando realice su solicitud a "/ places/set_member/add /" para guardar, devuelva el html que necesita en lugar de hacer otra llamada ajax para obtenerlo. – PetersenDidIt

+0

No es una mala idea, soy bastante nuevo en todo esto, así que no estaba seguro de cómo hacerlo. – matthewb

Respuesta

12

IE almacena todas las llamadas ajax que no son del tipo convencional. He descubierto que es mejor hacer que todas las llamadas a Ajax POST eviten que IE haga esto, incluso si publica datos vacíos.

O puede hacer como @redsqaure sugiere a continuación y hacer esto:

$ .ajaxSetup ({cache: false})

+0

Voy a intentar eso, entonces ¿por qué veo el primer error interno 500, es porque la solicitud ya fue enviada y almacenada? – matthewb

+0

Gracias, al hacer 1 publicación y hacer que devuelvan el html corrige mi problema, ya no estoy haciendo GET para nada. – matthewb

+7

solo usa la configuración global $ .ajaxSetup ({cache: false}). Esto desactiva la memoria caché para todas las solicitudes xhr.No publiques cuando quieras ... – redsquare

2

IE almacena en caché las llamadas ajax. asegúrese de incluir un número aleatorio o cadena aleatoria en su llamada, como &rand=[some randomly generated something] y vuelva a intentarlo.

0

Finalmente! he resuelto mi problema que es debido a la "política del mismo origen" y simplemente aumentar en IE !: Acabo de cambiar el parámetro URL de: 'http://mysite.com/api/' a '/ api /' y funciona !!!

espero que ayude a algunos de ustedes!

-1

En la mayoría de los navegadores se puede especificar:

url: '' 

... para una llamada ajax jQuery y esto va a publicar en sí mismo.

En IE, debe proporcionar una dirección URL.

url: '/relative/path/to/script' 
+0

No estoy seguro de por qué tienes un voto negativo. Este fue mi problema exacto. ¡Gracias! – Jeremy

4

Si no necesita que su tipo de datos sea HTML, puede intentarlo.

$.ajax({   
    url: 'Enter URL' 
    dataType: 'jsonp', 
    type: 'get', 
    success: function (data) { } 
}); 
0

Tuve el mismo problema con jquery 2.0.2. Cambié el jquery a 1.8.1 y Ajax funcionó perfectamente en IE.