【问题标题】:XMLHttpRequest has a 200 status, but responseText is emptyXMLHttpRequest 状态为 200,但 responseText 为空
【发布时间】:2016-07-22 12:53:36
【问题描述】:

我正在创建一个 XMLHttpRequest 来上传图像文件。我可以看到它的状态为 200,并且我的图像正在上传到我的服务中。但是,当我使用下面的代码获取 responseText(其中应包括以下信息:我的图像的 URL、文件名、时间戳、图像尺寸等)时,它会以空字符串的形式返回:

  //...

  const data = new FormData();
  data.append('file', props);
  data.append('upload_preset', uploadPreset);
  data.append('api_key', apiKey);

  const xhr = new XMLHttpRequest();
  xhr.open('POST', cloudinaryURL, true);
  const sendImage = xhr.send(data);
  const imageResponse = xhr.responseText;
  console.log('Response: ', imageResponse);

将其打印到控制台:

Response:  

知道为什么会发生这种情况/如何解决这个问题吗?

谢谢!!

【问题讨论】:

  • 你确定错误在js部分吗?
  • 服务器端返回什么?
  • responseText 是您正在调用的页面的输出文本
  • @RugDealer 这是在 Redux 操作中处理的,所以根本不接触服务器。
  • @k102 是的,因为它确实有效。我可以看到上传的图像,并且得到了 200 ok 状态。这是我的应用程序中唯一发出请求的文件。

标签: javascript xmlhttprequest


【解决方案1】:

您正在异步模式下使用 XMLHttpRequest:

xhr.open('POST', cloudinaryURL, true);

但是你的代码是为同步模式设计的:

xhr.open('POST', cloudinaryURL, false);

在异步模式下,xhr.send() 将立即返回而不实际处理请求。因此,当您尝试访问时,xhr.responseText 尚未填充。

【讨论】:

  • 是的,这解决了我的问题!非常感谢您指出问题并解释。欣赏它。
  • 我很高兴它有帮助。作为旁注,我实际上建议使用异步模式来避免浏览器无响应。你可以看到一个活生生的例子here
  • 太好了,谢谢你的例子。因此,如果 readyState == 4 和 status == 200,我可以异步运行并访问 responseText。很高兴知道。谢谢!!
猜你喜欢
  • 2014-05-28
  • 1970-01-01
  • 2011-06-27
  • 2022-01-08
  • 2014-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-26
相关资源
最近更新 更多