XMLHttpRequest()。send()在chrome和opera中不起作用

时间:2014-03-03 07:02:59

标签: javascript google-chrome

以下javascript函数适用于IE,Safari和Firefox。但它在Chrome(33.0。)和Opera(16.0.1196)中失败了。加载时会显示空白HTML页面。

function readTestXMLFile() {

    if (window.ActiveXObject) { 
        var xmlDoc = new ActiveXObject('Microsoft.XMLDOM');
        xmlDoc.async = 'false';
        xmlDoc.load('test.xml');
    }
    else {     
        var requ = new XMLHttpRequest();
        alert("a");

        requ.open("GET", "test.xml", false);
        alert("b");

        requ.send(null);    //This line is not working in chrome and opera
        alert("c");

        var xmlDoc = requ.responseXML;
        alert(xmlDoc);
        alert("d");
    }

    return xmlDoc;
}

只打印'a'和'b'。之后它不会继续下去。如果我使用requ.send()或requ.send(“”)而不是requ.send(null),则会观察到相同的结果。

如果我删除语句requ.send(null),则为xmlDoc打印'null'值。仍然是空白的HTML加载。

请告诉我在Chrome和Opera上使用这项工作的正确方法。

由于

SRB。

3 个答案:

答案 0 :(得分:1)

您的错误消息表明您正在尝试访问被视为“Cross origin request”的本地文件,如果您尝试运行本地服务器它应该可以正常工作。

使用相同的问题查看此前提出的问题: 的 Cross origin requests are only supported for HTTP but it's not cross-domain

然后您将访问http://localhost/.../test.xml而不是c:/localhost/.../test.xml

您还可以为Chrome设置一个标记,以允许本地文件请求本地文件:-allow-file-access-from-files

答案 1 :(得分:0)

对XMLHttpRequest.send方法的调用是异步的,因此您需要稍微修改一下调用。以下修改后的代码将在成功返回响应时打印响应内容:

 requ.addEventListener("load", function(e) {
           alert(req.responseText);
        }, false)

 requ.send(null);

<强>更新 我没有注意到你使发送请求调用同步。

修改 您需要使用此参数启动chrome才能访问本地文件

<强> - 允许文件存取从-文件

例如:c:\ Browser \ chrome.exe --allow-file-access-from-files

答案 2 :(得分:0)

我认为问题在于您将 null 传递给send()方法。您正在发出GET请求,因此您应该调用不带参数的send。我认为chrome会因此而抛出异常。只需删除 null

即可