2011-06-29 17 views
9

He estado tratando de resolver este problema durante horas (también he buscado aquí pero ninguna de las soluciones ha funcionado), así que no tuve más remedio que esperar que alguien me diga por qué es sucediendo y cómo puedo solucionarlo.solicitudes getJSON o AJAX que no funcionan con IE9

Este es un código simple que funciona con Firefox, pero no con IE9 (no tienen otras versiones)

Ejemplo código está aquí:

http://jsfiddle.net/z5b2J/

Fuente es éste:

$.ajax({ 
    url: "http://query.yahooapis.com/v1/public/yql?q=select%20script%20from%20html%20where%20url%3D%27https%3A%2F%2Ftesting.website.com%2F%3Fcid%3D48hgfd45430DD%26id%3D4830F8CF0454312%27&format=json&diagnostics=true&_maxage=86400", 
    success: function(){ 
    alert('hi'); 
    } 
}); 

El sitio web no necesita ser real para fines de prueba.

Como puede ver en el violín bajo Firefox, aparece una alerta que dice "hola" PERO si ejecuta exactamente el mismo código en IE9, la alerta no aparece.

Ocurre lo mismo con el método getJSON, este es un problema para mí porque quiero ejecutar algún código en lugar de la alerta, pero no se ejecutará en IE9.

Respuesta

13

¿Intentaste usar getJSON() en lugar de ajax? Esta es una solicitud entre dominios y está buscando a json para que sea probablemente el problema.

Está funcionando en ambos navegadores ahora:

$.getJSON("http://query.yahooapis.com/v1/public/yql?q=select%20script%20from%20html%20where%20url%3D%27https%3A%2F%2Ftesting.website.com%2F%3Fcid%3D48hgfd45430DD%26id%3D4830F8CF0454312%27&format=json&diagnostics=true&_maxage=86400&callback=?",function(){ 
    alert('hi'); 
}); 
+0

"La misma situación ocurre con el método getJSON" Sí, lo intenté. – MikeJ

+0

intente lo de arriba. este violín funciona para mí: http://jsfiddle.net/z5b2J/7/ –

+8

(recuerde que tiene que agregar el argumento "& callback =?" a la URL ... esta es una forma, o puede especificar 'jsonp' como el tipo de datos en su llamada $ ajax. –

4

Usando $.getJSON o $.ajax También debe especificar dataType parámetro 'jsonp'

Aquí el ejemplo usando getJSON:

var webpage = ".... your very long url ...."; 
var anchor = document.createElement('a'); 
anchor.href = webpage; 
// handle the multiple parameters 
anchor.search += ((anchor.search.length > 0) ? "&" : "?"); 
anchor.search += "callback=?"; 

$.getJSON(anchor.href, 'jsonp', function(data, textStatus, jqXHR){ 
    alert('hi'); 
}); 
+2

Eso es solo si realmente estás usando jsonp. – nikolasleblanc

6

El problema de IE9 depende de la gestión avanzada de caché.

Si vacías la caché de IE y vuelves a ejecutar la solicitud de ajax: la primera vez funcionará.

Para resolver este problema, debe enviar su respuesta HTTP con "noStore = true" y "Duration = 0" o equivalente.

Aquí hay un example in MVC.

2

me resolvió el problema mediante la adición de "Duración = 0" con la url

2

Si agrega devolución de llamada =? a la URL, se transformará en algo así como callback = jQuery1820719005049791166_1366033695001. Es el nombre de la función y en el lado del servidor debe envolver su objeto codificado json en esta llamada de función. Por lo tanto, su cuerpo de respuesta no debe ser simplemente {ok: true}, sino jQuery1820719005049791166_1366033695001 ({ok: true}); . ¡Funcionó para mí!

Cuestiones relacionadas