【问题标题】:XMLHTTPRequest.status returns 0 and responseText is blank in FireFox 3.5XMLHTTPRequest.status 在 FireFox 3.5 中返回 0 并且 responseText 为空白
【发布时间】:2010-12-31 03:41:36
【问题描述】:

我正在尝试访问第三方 URL 以获取 XML 响应并将响应显示到我的网页中。 在 IE 和 Safari 浏览器中,我得到了状态为 200 和 readystate 为 4 的正确响应。 但是在 FF3.5 和 Crome 中,我将 XMLHTTPRequest 状态设为 0,而 reponseText 以空白字符串的形式出现。我尝试了许多选项来编写普通的 XMLHTTPRequest Ajax 代码以及为此 ajax 请求使用 Prototype 1.5 版本的 js 文件,但 FF 3.5 中的状态和响应文本仍然与 0 和空白字符串相同。

任何帮助如何解决此问题或导致此问题的确切原因将不胜感激。 我还尝试在本地执行我的代码以及部署到网络服务器,但 FF 中的响应是相同的。

下面是我的代码sn-p

<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>

【问题讨论】:

  • “第三方 URL”与执行请求的脚本所在的页面是否位于同一域中?
  • 您还应该使用 XMLHttpRequest 来加载 XML 文件,而不是不规范且兼容性较差的 DOMParser 或 XMLDOM。

标签: javascript html ajax xmlhttprequest


【解决方案1】:

您好像碰到了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 的代理来提供此服务。

【讨论】:

    猜你喜欢
    • 2011-02-14
    • 1970-01-01
    • 2011-01-23
    • 2015-10-15
    • 1970-01-01
    • 2011-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多