2009-12-30 4 views
8

XML yanıtını almak ve web sayfamda deposu göstermek için üçüncü taraf bir URL'ye vurmaya çalışıyorum. IE ve Safari tarayıcılarında 200 ve readystate 4 olarak doğru bir yanıt alıyorum. Ancak FF3.5 ve Crome'da XMLHTTPRequest durumunu 0 olarak al ve reponseText boş bir dize olarak geliyor. Ben normal XMLHTTPRequest Ajax kodunu yazarken birçok seçenek denedim ve bu ajax isteği için Prototype 1.5 sürümü js dosyasını kullanmaya devam ettim ama yine de FF 3.5'deki durum ve reponseText 0 ve boş dize ile aynı kalıyor.XMLHTTPRequest.status 0 döndürür ve responseText boştur FireFox 3.5

Bu sorunun nasıl giderileceği veya bu soruna tam olarak neden olan her şey büyük ölçüde takdir edilecektir. Ayrıca kodumu yerel olarak çalıştırmayı denedim ve aynı zamanda web sunucusuna dağıtmak da FF'deki aynı şeyle aynıydı.

Aşağıda same origin policy çarptı anlaşılıyor benim kod parçacığı

<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

"Üçüncü taraf URL'si", isteği yürüten komut dosyası içeren sayfa ile aynı etki alanında mı? – CalebD

+0

Ayrıca, XML dosyasını yüklemek için bir XMLHttpRequest kullanmalısınız, bir standart olmayan ve daha az geniş çapta uyumlu olan bir DOMParser veya XMLDOM değil. – bobince

cevap

16

olduğunu. Göreceli bir yol kullanmalısınız, aksi halde çoğu tarayıcı boş bir responseText döndürür.

aşağıdaki yığın taşması sonrası

muhtemelen de sorunu ile ilgilidir:

olası bir çözüm olarak, kurmak olabilir çok basit reverse proxy (mod_proxy ile Apache kullanıyorsanız). Bu, AJAX isteğinizdeki göreceli yolları kullanmanıza izin verirken, HTTP sunucusu herhangi bir "uzak" konuma proxy görevi görecektir.

Mod_proxy'de bir ters proxy oluşturmak için temel yapılandırma yönergesi ProxyPass'tır. aşağıdaki gibi tipik kullanmak olacaktır:

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

Bu durumda, tarayıcı /web-services/service.xml istekte olurdu ancak sunucu http://third-party.com/web-services/service.xml bir vekil olarak hareket ederek bu hizmet verecek.