2012-02-16 37 views
11

Tengo un script que realiza una solicitud de AJAX a un servidor remoto, que devuelve una respuesta de texto sin formato. Funciona bien en todos los navegadores excepto IE8 (shocker).El servidor remoto de dominio cruzado Jquery ajax() no funciona en IE8

Aquí está el código:

$.ajax({ 
    url: 'abc.com/?somerequest=somevalue', 
    cache: false, 
    type: 'POST', 
    data:{ 
    sub: 'uploadprogress', 
    uploadid: this.uploadId 
    }, 
    dataType: 'html', 
    success: this.uploadProgressResp, 
    error: this.errorResp 
}); 

En IE8, se devuelve un error "No hay transporte". Supongo que es porque IE8 no permite solicitudes de dominios cruzados?

NOTA: No escribí la API para el servidor remoto. Si lo hiciera, devolvería la respuesta JSON en lugar de una respuesta de texto sin formato. Así que sí, se supone que dataType es HTML en lugar de JSON.

RANT: odio IE y desearía que desaparecería de la faz de la tierra

+0

has necesitado JSONP? –

+1

posible duplicado de la llamada [$ .ajax que funciona bien en IE8 y no funciona en los navegadores Chrome y Firefox] (http: // stackoverflow.com/questions/8698682/ajax-call-working-fine-in-ie8-and-doesnt-work-in-firefox-and-chrome-browsers) –

+0

@Diodeus He intentado con JSONP, pero todavía produce errores en IE8. La respuesta es un texto y no JSON, por lo que tampoco creo que sea apropiado. – peter

Respuesta

3
+0

Desafortunadamente, no puedo alterar el código o la respuesta del servidor remoto – peter

+0

si no puede modificar la respuesta del servidor remoto, siga el segundo [tutorial detallado.] (Http://cmsnsoftware.blogspot.com/2012/02/ how-to-use-cross-domain-ajax-request.html # 1) se menciona claramente cómo configurar su propio proxy en su servidor (no en el servidor remoto) –

+0

La configuración de un proxy en su propio servidor es demasiado lenta . tiene que pasar por su propio servidor, solicitarlo desde un servidor remoto, esperar la respuesta y luego emitir su propia respuesta. La solicitud toma el doble de tiempo. – peter

7

Trate de añadir esto en alguna parte antes de la llamada ajax - El mejor lugar porque es antes que cualquier otro JavaScript ejecuta!

jQuery.support.cors = true; 

Sin esto, Internet Explorer lanzará el error "Sin transporte". El mensaje de error en sí mismo es bastante confuso, pero por defecto las solicitudes ajax de dominios cruzados están bloqueadas por IE, pero no parecen serlo por otros navegadores, o al menos, Chrome y Firefox funcionarán con ese efecto.

Compartí tu dolor en este caso, históricamente. Muy seguro de que va a ordenar su problema.

+6

Después de agregar esa línea de código, ahora recibo un error de "Acceso denegado" – peter

+2

Eso me sorprende: tuve el problema "Sin transporte" y lo resolví inmediatamente con ese código. Investigué un poco más y me encontré con esto: http://stackoverflow.com/questions/5087549/access-denied-to-jquery-script-on-ie - ¿Alguna ayuda? Lamento que mi sugerencia no haya funcionado para usted: \ – SpaceBison

+0

Tuve este problema, Trabajé en Chrome pero no proporcioné ningún error de transporte en IE, la solución de SpaceBison resolvió mi problema. Tuve que hacer la llamada directamente encima de la llamada ajax. Primero intenté agregarlo en $ (documento). Listo pero no funcionó y luego lo agregué directamente en frente de la llamada ajax y funcionó. Gracias SpaceBison – Lismore

0

sé que esto es muy vieja pregunta, pero lamentablemente la gente sigue usando IE8/9 y, a veces tenemos que apoyarlos:/

Esta es la mejor solución que era capaz encontrar para este problema:

https://github.com/MoonScript/jQuery-ajaxTransport-XDomainRequest

basta con incluir siguiente s CRIPT en su html y eso es todo, usted no tiene que modificar nada en su petición jQuery

<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jquery-ajaxtransport-xdomainrequest/1.0.3/jquery.xdomainrequest.min.js"></script>

Limitaciones:

  • IE6/7 no es compatible, sólo el IE8 y IE9
  • versión
  • jQuery mínima es de 1,5
  • Cuando se utiliza el método POST en IE8/9, Content-Type cabecera siempre será conjunto a text/plain
  • página web actual y solicitó URL ambos deben estar usando el mismo protocolo (peticiones HTTP-> HTTPS o https-> HTTP no funcionará)
Cuestiones relacionadas