我正在尝试点击第三方网址以获取XML响应并显示重新发布到我的网页中。 我在IE和Safari浏览器中得到状态为200且readystate为4的正确响应。 但在FF3.5和Crome中,我将XMLHTTPRequest状态设置为0,而reponseText则为空字符串。我尝试了许多选项来编写正常的XMLHTTPRequest Ajax代码以及使用Prototype 1.5版本js文件来处理这个ajax请求,但是FF 3.5中的状态和reponseText仍然与0和空字符串相同。
任何帮助如何解决此问题或究竟是什么导致此问题将不胜感激。 我还试图在本地执行我的代码以及部署到webserver仍然在FF中的repsonse是相同的。
以下是我的代码段
<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 :(得分:16)
看起来你碰到了same origin policy。您必须使用相对路径,否则大多数浏览器只会返回一个空的responseText
。
以下Stack Overflow帖子可能也与您的问题有关:
作为一种可能的解决方法,您可以设置一个非常简单的reverse proxy(如果您使用的是Apache,则为mod_proxy)。这将允许您在AJAX请求中使用相对路径,而HTTP服务器将充当任何“远程”位置的代理。
在mod_proxy中设置反向代理的基本配置指令是ProxyPass。您通常会按如下方式使用它:
ProxyPass /web-services/ http://third-party.com/web-services/
在这种情况下,浏览器会请求/web-services/service.xml
,但服务器将通过充当http://third-party.com/web-services/service.xml
的代理来实现此目的。