AJAX问题 - FireFox中没有响应文本,但在IE中没问题

时间:2010-06-07 11:34:13

标签: javascript ajax

我正在对外部网站进行简单的AJAX调用。它在IE中运行正常,但在Firefox中,不会返回响应文本。

我认为这可能与“chunked”的响应有关,但我不确定。

有什么想法吗?感谢。

<html>
<head>
    <script type="text/javascript" charset="utf-8">
        function loadXMLDoc() {
            var xmlhttp;
            var urlString = "http://drc.edeliver.com.au/ratecalc.asp?Pickup_Postcode=6025&Destination_Postcode=6055&Country=AU&Weight=100&Service_Type=STANDARD&Length=100&Width=100&Height=100&Quantity=2";
            if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
                xmlhttp=new XMLHttpRequest();
            } else {// code for IE6, IE5
                xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
            }
            xmlhttp.onreadystatechange=function() {
                if (xmlhttp.readyState==4) {
                    window.alert(xmlhttp.responseText);
                }
            }
            xmlhttp.open("GET", urlString, true);
            xmlhttp.send();
        }
    </script>
</head>
<body>
    <span onclick="loadXMLDoc()">Click Me</span>
</body>
</html>

6 个答案:

答案 0 :(得分:4)

您的网页是否也在http://drc.edeliver.com.au托管?如果没有,那么您不能对该URL进行XMLHttpRequest。这违反了基本的浏览器安全性,对于IE测试,可能会被显式浏览器配置所抑制。

编辑 - 我认为IE让“本地安全区”(或他们称之为的任何东西)逃脱了“互联网”区域页面不允许的内容。

答案 1 :(得分:2)

您可能想尝试在urlString中使用相对网址,以避免Same Origin Policy出现问题。


更新:对于评论,如果JSONP不是一个选项,您还可以设置一个简单的reverse proxy来绕过相同的原始政策。如果您使用的是Apache,则可以使用mod_proxy。这将允许您在AJAX请求中使用相对路径,而HTTP服务器将充当任何“远程”位置的代理。

在mod_proxy中设置反向代理的基本配置指令是ProxyPass。您通常会按如下方式使用它:

ProxyPass     /remote/     http://drc.edeliver.com.au/

在这种情况下,浏览器可以请求/remote/ratecalc.asp,但服务器可以通过充当http://drc.edeliver.com.au/ratecalc.asp的代理来提供此服务,而浏览器似乎就像是从相同的起源。

答案 2 :(得分:1)

是的,分块响应(COMET流)可能是问题所在:

http://blogs.msdn.com/b/ieinternals/archive/2010/04/06/comet-streaming-in-internet-explorer-with-xmlhttprequest-and-xdomainrequest.aspx

由于流仍然与许多问题相关联(例如,在使用代理时),我当前的建议是使用长轮询(关闭每个块的响应,并立即发出新请求)。这是一个不幸的情况 - 我也喜欢使用流媒体。

修改

我们发现,这实际上不是问题所在!

答案 3 :(得分:0)

我认为这个问题只是一个跨域安全的简单案例。

我正在尝试从本地静态HTML页面到外部URL进行AJAX调用。

IE允许我这样做。 Firefox不允许我这样做。

Firefox不提供错误消息(就像跨域iFrame DOM访问一样)。响应文本只是空的。

感谢大家的帮助。很抱歉发布这样一个狡猾的问题。

答案 4 :(得分:0)

对于跨域请求,请查看this article

您可能需要启用以下标题才能在FF / Chrome中使用

Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST, GET, OPTIONS

答案 5 :(得分:0)

我也遇到了使用XMLHttpRequest的ajax问题,下面是帮助我的代码

var link=document.createElement('a'); 
link.href= url; 
document.body.appendChild(link); 
link.click();  
setTimeout(function()
{ 
     document.body.removeChild(link);
     window.URL.revokeObjectURL(data); 
}, 100);