2016-01-05 145 views
1

我一直在尝试使用jquery-ajax从我的服务器下载二进制文件,我终于放弃了。所以现在我试图使用XMLHttpRequest来代替。然而,我甚至无法得到一个简单的例子工作。XMLHttpRequest似乎没有做任何事情

奇怪的是,这段代码似乎没有做任何事情。我从w3schools复制/粘贴此示例,此示例与其他示例几乎相同。它不为我在Chrome浏览或FF工作:

var xhttp = new XMLHttpRequest(); 
xhttp.onreadystatechange = function() { 
    if (xhttp.readyState == 4 && xhttp.status == 200) { 
     // Action to be performed when the document is read; 
    } 
}; 
xhttp.open("GET", '/blah/blah/output.png', true); 
xhttp.send(); 

我们进入的onreadystatechange函数只有一次,在的open()声明与xhttp.readyState等于一个,但不能在发送()一步。我认为它至少会抛出某种错误,而不是什么都不做。

另外,作为一个实验,我故意给open()一个不好的url - 但是没有回复。

有人可以告诉我我可能会做错什么吗?

非常感谢。

+1

所以你打开控制台(F12),然后检查错误? – adeneo

+0

是的!我有“调试器”;作为我的第一行,并且我经历了无数次。 – edwardsmarkf

+0

对我来说工作得很好 - > https://jsfiddle.net/mevqgw23/ – adeneo

回答

2

你的代码对我来说看起来是正确的,它指向一些外部原因。

您的代码是否一直流到执行上下文的末尾?浏览器将保持网络请求,直到引擎退回到浏览器。

例如:

var xhttp = new XMLHttpRequest(); 
xhttp.onreadystatechange = function() { 
    if (xhttp.readyState == 4 && xhttp.status == 200) { 
    // Action to be performed when the document is read; 
    } 
}; 
xhttp.open("GET", '/blah/blah/output.png', true); 
xhttp.send(); 

while(true){} 

绝不会发送呼叫。

+0

yup - 我试着在没有chrome-debugger的情况下运行它(偶尔会引入一些它自己的问题)。有没有办法解决? – edwardsmarkf

+0

尝试将它放在它自己的函数中,并在函数调用前放置一个调试器语句。然后,您可以进入该功能,当您完成该功能时,上下文将结束,并且将发送该呼叫。 –

+0

请记住,send()并不实际发送呼叫。它只是标记要发送的调用,并且在将控制权交还给浏览器时,浏览器中的本机代码将处理它。 –

相关问题