La llamada Ajax externa JQuery no funciona en IE

Tengo un script ajax que envía algunos datos a una URL externa. La URL externa está alojada en el mismo servidor, sin embargo, el dominio es diferente a la fuente de la llamada ajax.

Esto funciona perfectamente en Firefox y Chrome. Sin embargo, en IE, la llamada ajax no se realiza y la función Return False tampoco funciona (una vez que falla la llamada ajax).

A continuación se muestra mi código:

$.get('http://myexternaldomian.com/feedback/save.php', { answer: $('#answer').val(), page_url: pathname }); // Keeps the user on the page return false; 

Cuando bash eliminar http: // de la url ajax, el retorno false funciona.

Cualquier ayuda en esto sería apreciada grandemente Gracias

Me sorprende que alguno de ellos esté trabajando. Los navegadores generalmente no permiten llamadas ajax a un dominio que no sea el que provenía de la página actual.

La principal excepción a esta regla es si realiza una llamada ajax utilizando jsonp (json with padding). Puedes hacer esto con jQuery, así es como . Busque en la opción dataType .

De la documentación de jQuery.

Debido a las restricciones de seguridad del navegador, la mayoría de las solicitudes “Ajax” están sujetas a la misma política de origen; la solicitud no puede recuperar datos de un dominio, subdominio o protocolo diferente.

y la misma política de origen en Wiki

(esto es copypaste de mi otra respuesta similar). Podría intentar habilitar el indicador “jQuery.support.cors = true” y ver cómo va. Yo uso jQuery v1.7.2.

Tuve que cargar la página web desde el disco local “file: /// C: /test/htmlpage.html”, llamada “http: //localhost/getxml.php” url, y hacer esto en los navegadores IE8 + y Firefox12 +, usar jQuery v1 .7.2 lib para minimizar el código repetitivo. Después de leer docenas de artículos, finalmente lo resolvieron. Aquí está mi resumen.

  • el script del servidor (.php, .jsp, …) debe devolver el encabezado de respuesta http Access-Control-Allow-Origin: *
  • antes de usar jQuery ajax establezca este indicador en javascript: jQuery.support.cors = true;
  • puede configurar el indicador una vez o siempre antes de usar la función ajax jQuery
  • Ahora puedo leer el documento .xml en IE y Firefox. Otros navegadores que no probé.
  • El documento de respuesta puede ser simple / texto, xml, json o cualquier otra cosa.

Aquí hay un ejemplo de llamada jQuery ajax con algunos sysouts de depuración.

 jQuery.support.cors = true; $.ajax({ url: "http://localhost/getxml.php", data: { "id":"doc1", "rows":"100" }, type: "GET", timeout: 30000, dataType: "text", // "xml", "json" success: function(data) { // show text reply as-is (debug) alert(data); // show xml field values (debug) //alert( $(data).find("title").text() ); // loop JSON array (debug) //var str=""; //$.each(data.items, function(i,item) { // str += item.title + "\n"; //}); //alert(str); }, error: function(jqXHR, textStatus, ex) { alert(textStatus + "," + ex + "," + jqXHR.responseText); } }); 

No creo que debería funcionar en Chrome o Firefox, a menos que esté probando en localhost o algo así, esto estaría en contra de la política de dominio cruzado.

Lo que necesita es hacer proxy en el mismo dominio, usar php para conectarse al destino que necesita y llamar a la url desde el mismo dominio.

save_cross_domain.php -> conectarse a través del servidor a la url deseada

entonces ajax llama a save_cross_domain.php

deberías agregar un

 callback=? 

a su url y manejar esto en el lado del servidor.

Hice esto una vez para un servlet de java, y cuando se incluyó el parámetro de callback, agregué un par de parentesis adicionales alrededor de la respuesta de json.

¡Espero eso ayude!

Un par de cosas:

  • Las respuestas / conversaciones para esta pregunta han salido un poco fuera de contexto. En realidad, a partir de la pregunta, estaba más implicado cómo hacer llamadas ajax en IE. [Al menos, modifique el título de la pregunta, de lo contrario, la pregunta está muy localizada]

Un par de soluciones a este problema de dominio cruzado:

  1. CORS [compatible después de IE7]
  2. JSONP [aquí en realidad el navegador toma la entrada pensando que es un script]
  3. encoding del lado del servidor