2009-12-30 13 views
8

Sto cercando di raggiungere un URL di terze parti per ottenere la risposta XML e mostrare il reposne nella mia pagina web. Ricevo una risposta corretta con stato 200 e readystate come 4 nei browser IE e Safari. Ma in FF3.5 e Crome ottengo lo stato XMLHTTPRequest come 0 e ReponseText si presenta come una stringa vuota. Ho provato molte opzioni scrivendo il normale codice Ajax di XMLHTTPRequest e utilizzando il file js di versione 1.5 di Prototype per questa richiesta ajax, ma lo stato e reponseText in FF 3.5 rimangono uguali a 0 e stringa vuota.XMLHTTPRequest.status restituisce 0 e responseText è vuoto in FireFox 3.5

Qualsiasi aiuto su come risolvere questo problema o che cosa sta causando esattamente questo problema sarebbe molto apprezzato. Avevo anche provato a eseguire localmente il mio codice oltre a distribuire su webserver il repsonse in FF è lo stesso.

Qui di seguito è il mio frammento di codice

<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

È "l'URL di terze parti" nello stesso dominio della pagina in cui è presente lo script che esegue la richiesta? – CalebD

+0

Dovresti utilizzare anche XMLHttpRequest per caricare il file XML, non un DOMParser o XMLDOM che non è standardizzato e molto meno ampiamente compatibile. – bobince

risposta

16

Sembra che tu hai urtato il same origin policy. Devi usare un percorso relativo, altrimenti la maggior parte dei browser restituirà semplicemente uno responseText vuoto.

Il seguente post Stack Overflow è probabilmente anche legato al vostro problema:

come una possibile soluzione alternativa, è possibile impostare una molto semplice reverse proxy (con mod_proxy se si utilizza Apache). Ciò consentirebbe di utilizzare percorsi relativi nella richiesta AJAX, mentre il server HTTP agirà come un proxy per qualsiasi posizione "remota".

La direttiva di configurazione fondamentale per impostare un proxy inverso in mod_proxy è ProxyPass. Viene in genere utilizzato come segue:

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

In questo caso, il browser sarebbe chiedendo /web-services/service.xml ma il server potrebbe servire questo, agendo come un proxy per http://third-party.com/web-services/service.xml.