2011-08-04 12 views
14

estoy usando esta página - http://ecmazing.com/cors.html - para hacer una petición Ajax de origen cruzado a este recurso: http://hacheck.tel.fer.hr/xml.plLas solicitudes Ajax de origen cruzado no funcionan en Opera e IE9?

Funciona en Chrome, Safari y Firefox, pero no lo hace en IE9 y Opera.

El código:

var pdata = {'textarea': 'test'}; 

$.post('http://hacheck.tel.fer.hr/xml.pl', pdata, function(data, status, xhr) { 
    output.value = xhr.responseText; 
}); 

(. El resultado esperado es una cadena de código XML)

Vea usted mismo:http://ecmazing.com/cors.html

En IE9 y Opera, el manejador de error de la El objeto XHR se ejecuta y se pasa este objeto de error:

{ 
    readyState: 4, 
    status: 0, 
    statusText: 'error' 
} 

Como puede ver, este objeto de error no revela mucha información.

¿Cómo puedo hacer que funcione en IE9 y Opera?

Respuesta

9

Consulte la entrada para cors at whencaniuse.

Para Internet Explorer CORS es "Compatible un tanto en IE8 e IE9 utilizando el objeto XDomainRequest", por lo que debe usar un objeto alternativo para usarlo.

Opera simplemente no lo admite.

Si necesita un dominio entre dominios de Ajax en Opera, utilice JSON-P.

+1

OK, eso descarta Opera. Pero pensé que jQuery usa ese objeto de XDomainRequest internamente ... Iré a ver el código fuente de jQuery. –

+0

No, 'XDomainRequest' no se menciona en ninguna parte en el código fuente de jQuery. Supongo que jQuery simplemente no admite solicitudes Ajax de dominio cruzado en IE9 y Opera en este momento ... –

+0

JSON-P no se aplica a POST u otras solicitudes. –

6

Me frustré tanto al tratar de usar CORS con IE y jQuery, escribí library para suavizar las peores partes.

Sí, la escasez de efectivo y mano de obra de Microsoft les impidió hacer que sus navegadores cumplan CORS correctamente en los siete cortos años en los que tuvieron que hacerlo, pero aún prefiero CORS a JSONP, que, francamente, es un truco.

Cuestiones relacionadas