Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript XMLHttprequest.send(null)正在破坏我的代码_Javascript_Html_Xml - Fatal编程技术网

Javascript XMLHttprequest.send(null)正在破坏我的代码

Javascript XMLHttprequest.send(null)正在破坏我的代码,javascript,html,xml,Javascript,Html,Xml,我目前正在使用JavaScript编写一个搜索函数 然而,当我尝试测试我的创作时,我发现它在中途停止了,没有明显的原因 下面是我的代码: document.getElementById("test").innerHTML = ""; var Connect = new XMLHttpRequest(); Connect.open("GET", "xmlTest.xml", false); document.getElementById("test").innerHTML = "1"; Conne

我目前正在使用JavaScript编写一个搜索函数

然而,当我尝试测试我的创作时,我发现它在中途停止了,没有明显的原因

下面是我的代码:

document.getElementById("test").innerHTML = "";
var Connect = new XMLHttpRequest();
Connect.open("GET", "xmlTest.xml", false);
document.getElementById("test").innerHTML = "1";
Connect.send(null);
document.getElementById("test").innerHTML = "2";
var docX = Connect.responseXML;
var linjer = docX.getElementsByTagName("linjer");
第一行用于清除代码前面的潜在错误消息。然后我尝试打开一个XML文件,因为我需要从中读取

如您所见,我在这里输入了两条调试语句;他们会根据我在代码中的距离打印1或2

使用它,我发现它在
Connect.send(null)上完全停止语句(当1被打印,但2从未打印),但我不知道为什么。谷歌说可能是chrome无法访问本地文件,但当我找到一种允许chrome访问本地文件的方法时,它仍然不起作用


我做错了什么?

这可能是一个同步问题,需要代码无法得到的响应

请尝试改用异步调用:

Connect.open("GET", "xmlTest.xml", true);
另外,请确保设置正确的回调,因为您现在将使用异步而不是同步代码,如下所示:

// Global variable scope
var docX;
var linjer;

// Define your get function
getDoc = function(url, cbFunc) {

    var Connect = new XMLHttpRequest();

    // Perform actions after request is sent
    // You'll insert your callback here
    Connect.onreadystatechange = function() {
        // 4 means request finished and response is ready
        if ( Connect.readyState == 4 ) {
            // Here is where you do the callback
            cbFunc(Connect.responseXML);
        } 
    }; 

    // 'true' param means async, it is also the default
    Connect.open('GET', url, true);
    Connect.send();
}

// Define your callback function    
callbackFunction = function(responseXML) {
    // XML file can now be stored in the global variable
    window.docX = responseXML;
    window.linjer = window.docX.getElementsByTagName("linjer");
}

// And here is the call you make to do this
getDoc("xmlTest.xml", callbackFunction); 

为了更好地理解所有这些,请对作用域闭包回调异步

进行一些研究。您是否尝试过不发送
.send()
或空字符串
.send(“”
)?您禁用了异步,并且由于代码在发送函数处停止,查找该本地文件时一定会遇到问题。开发人员工具控制台和网络选项卡上显示了什么?@RocketHazmat这不是一个异步调用。因此,您正在使用文件协议运行,并且您启动Chome时使用了
--允许从文件访问文件
?这似乎奏效了!我一点也不知道什么是正确的回调。。。我在哪里能找到这些?编辑:好吧,这有点用。它使debug语句编号2出现,但随后在var docX=Connect.responseXML处再次停止@Jack38更新了,请让我知道这是否适合你。这是它正常工作所需要做的一切吗?我还需要在回调函数中设置其他内容吗?@TheJack38您需要根据自己的需要编辑回调,如何处理该响应取决于您自己。因此,您要获取XML,在回调中,您需要定义您想要对XML数据执行的操作。基本上,我可以复制粘贴此代码,然后让callbackFunction(response)正常执行我想要对响应执行的任何操作。是的,我看看这是否有效,谢谢!(我必须快点去上课,所以我现在不能测试它)