我正在尝试访问第三方 URL 以获取 XML 响应并将响应显示到我的网页中。 我在 IE 和 Safari 浏览器中得到状态为 200 和就绪状态为 4 的正确响应。 但在 FF3.5 和 Crome 中,我得到的 XMLHTTPRequest 状态为 0,reponseText 为空字符串。我尝试了很多选项来编写普通的 XMLHTTPRequest Ajax 代码以及使用 Prototype 1.5 版本的 js 文件来处理这个 ajax 请求,但 FF 3.5 中的状态和 reponseText 仍然与 0 和空白字符串相同。
如果能提供解决此问题的帮助或究竟是什么导致了此问题,我们将不胜感激。 我也曾尝试在本地执行我的代码以及部署到网络服务器,但 FF 中的响应仍然相同。
下面是我的代码片段
<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>
最佳答案
看来您遇到了 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
。
关于javascript - XMLHTTPRequest.status 返回 0 并且 responseText 在 FireFox 3.5 中为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1980880/