如何在Firefox上通过HTTPS使XMLHttpRequest工作?

时间:2008-09-26 06:10:28

标签: ajax firefox

当我尝试通过XMLHttpRequest发送HTTP GET请求时,它可以在非安全HTTP上运行。

但是,当通过HTTPS发送时,不同的浏览器会产生不同的结果:

在Firefox 3.0.2上: - GET请求未到达Web服务器。

在IE 7上: - GET请求到达了Web服务器。

这是否与Firefox 3对不受信任的证书越来越严格有关? 有办法解决这个问题吗?

我已经在Firefox的证书管理器中添加了URL作为例外。 错误控制台不报告任何错误。 我在XMLHttpRequest的open()和send中添加了一个try-catch。没有例外。

使用绝对和相对URL路径都不起作用。

以下是代码段:

    var xmlHttp;
    try
    {
        // Firefox, Opera 8.0+, Safari
        xmlHttp=new XMLHttpRequest();
    }
    catch (e)
    {
        // Internet Explorer
        try
        {
            xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
        }
        catch (e)
        {
            try
            {
                xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
            }
            catch (e)
            {
                return false;
            }
        }
    }
    // we won't be handling any HTTP response
    xmlHttp.onreadystatechange=function()
    {
        // do nothing..
    }
    // send HTTP GET request
    try
    {
        xmlHttp.open("GET", "/[relative path to request]", true);
        xmlHttp.send(null);
    }
    catch (e)
    {
        alert('Error sending HTTP GET request!');
        return false;
    }

谢谢, 肯尼斯

2 个答案:

答案 0 :(得分:1)

尝试在打开后放置闭包:

// send HTTP GET request
try
{
    xmlHttp.open("GET", "/[relative path to request]", true);
}
catch (e)
{
    alert('Error sending HTTP GET request!');
    return false;
}
// we won't be handling any HTTP response
xmlHttp.onreadystatechange=function()
{
    // do nothing..
}

// Then send it.
xmlHttp.send(null);

一个小小的谷歌搜索确认: http://www.ghastlyfop.com/blog/2007/01/onreadystate-changes-in-firefox.html

虽然该文档说在.send(null)之后附加了该函数,但我已经 打开后总是附上。

答案 1 :(得分:0)

您是否在HTTPS页面中请求非HTTPS URL?是否有任何消息出现在错误日志/控制台中?