2009-12-30 15 views
8

Estoy tratando de presionar una URL de un tercero para obtener la respuesta XML y mostrar el reposne en mi página web. Obtengo una respuesta adecuada con el estado 200 y estado listo como 4 en navegadores IE y Safari. Pero en FF3.5 y Crome obtengo el estado XMLHTTPRequest como 0 y el texto de respuesta viene como una cadena en blanco. Intenté muchas opciones escribiendo el código normal XMLHTTPRequest Ajax, así como el uso del archivo Js de la versión 1.5 de Prototype para esta solicitud ajax, pero el estado y el texto de respuesta en FF 3.5 siguen siendo los mismos que 0 y la cadena en blanco.XMLHTTPRequest.status devuelve 0 y responseText está en blanco en FireFox 3.5

Cualquier ayuda sobre cómo resolver este problema o qué causa exactamente este problema sería muy apreciada. También intenté ejecutar mi código localmente así como implementarlo en el servidor web, pero la respuesta en FF es la misma.

A continuación es mi fragmento de código

<script type="text/javascript" src="prototype_ajax.js"></script> 

<script type="text/javascript" language="javascript"> 

new Ajax.Request("I place my URL Here", { 
    method: 'get', 
    onSuccess : function(transport){ 

     var resultDoc = transport.responseText; 
     var rootObj = loadXML(resultDoc); 

    }, 
    onFailure : function(transport){ 
     alert(' On Failure '+transport) 

    } 
}); 

function loadXML(xmlFile) { 
    var xmlDocElement =null; 
    var xmlDoc = null; 

    if (window.ActiveXObject) { 
    try { 
     // code for IE 
     xmlDoc=new ActiveXObject("Microsoft.XMLDOM"); 
     xmlDoc.async=false; 
     xmlDoc.loadXML(xmlFile); 
    } catch (e) { 
     alert("inside catch::"+e.message); 
    } 
    } else { 
    // code for Mozilla, Firefox, Opera, etc. 
    parser=new DOMParser(); 
    xmlDoc=parser.parseFromString(xmlFile,"text/xml"); 

    //xmlDocElement=xmlDoc.documentElement; 
    } 

    //alert('loadXML value '+xmlDoc) 
    return xmlDoc; 
} 

</script> 
+0

¿La "URL de terceros" está en el mismo dominio que la página que tiene el script que ejecuta la solicitud? – CalebD

+0

También debe usar XMLHttpRequest para cargar el archivo XML, no un DOMParser o XMLDOM que no está estandarizado y es mucho menos compatible. – bobince

Respuesta

16

Parece que ha chocado con la same origin policy. Debe utilizar una ruta relativa, de lo contrario, la mayoría de los navegadores simplemente devolverán un responseText vacío.

El siguiente post desbordamiento de pila es, probablemente, también relacionado con su problema:

Como una posible solución, se podría establecer una muy simple reverse proxy (con mod_proxy si está utilizando Apache). Esto le permitiría usar rutas relativas en su solicitud AJAX, mientras que el servidor HTTP actuaría como un proxy para cualquier ubicación "remota".

La directiva de configuración fundamental para configurar un proxy inverso en mod_proxy es ProxyPass. Lo más habitual es utilizar la siguiente manera:

ProxyPass  /web-services/  http://third-party.com/web-services/ 

En este caso, el navegador sería solicitar /web-services/service.xml pero el servidor serviría esta actuando como un proxy para http://third-party.com/web-services/service.xml.

Cuestiones relacionadas