【问题标题】:XMLHttpRequest does not seem to do anythingXMLHttpRequest 似乎没有做任何事情
【发布时间】:2016-04-09 19:27:39
【问题描述】:

我一直在尝试使用 jquery-ajax 从我的服务器下载二进制文件,但最终我放弃了。所以现在我尝试改用 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();

我们只在 open() 语句中使用一次 onreadystatechange 函数,其中 xhttp.readyState 等于 1,但不是在 send( ) 步骤。我应该认为它至少会抛出某种错误,而不是什么都不做。

另外,作为一个实验,我故意给 open() 提供了一个错误的 url - 但同样没有回复。

谁能告诉我我做错了什么?

非常感谢。

【问题讨论】:

  • 那么您已经打开了控制台 (F12) 并检查了错误吗?
  • 是的!我有“调试器;”作为我的第一行,我多次通过它。
  • 对我来说非常好 -> jsfiddle.net/mevqgw23

标签: javascript xmlhttprequest xmlhttprequest-states


【解决方案1】:

您的代码在我看来是正确的,这表明存在一些外部原因。

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

例如:

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){}

永远不会拨打电话。

【讨论】:

  • 是的 - 我尝试在没有 chrome-debugger 的情况下运行它(它有时似乎会引入一些自己的问题)。有没有办法解决这个问题?
  • 尝试将其放入自己的函数中,并在函数调用前面放置一个调试器语句。然后您可以单步执行该函数,当您完成单步执行时,上下文将结束并发送调用。
  • 请记住,send() 实际上并不发送呼叫。它只是标记要发送的调用,当您将控制权交还给浏览器时,浏览器中的本机代码会处理它。
  • 约翰 - 非常感谢!现在我想知道 jquery-ajax 是否有同样的问题。编辑 - 不 - 我忘记了 jQuery-ajax 一直给我“解析器错误,没有从文本到二进制的转换”,这就是我首先切换到 XMLHttpRequest 的原因。
猜你喜欢
  • 1970-01-01
  • 2011-12-26
  • 1970-01-01
  • 2019-11-26
  • 2019-12-08
  • 2020-12-21
  • 2023-04-06
  • 2018-04-03
  • 2011-04-17
相关资源
最近更新 更多