首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JavaScript XHR -如果responseType设置为json,则获取非200状态的原始响应数据。

JavaScript XHR -如果responseType设置为json,则获取非200状态的原始响应数据。
EN

Stack Overflow用户
提问于 2017-02-02 12:54:21
回答 1查看 1.5K关注 0票数 2

如果在发送请求之前动态地将XMLHttpRequest设置为json,那么是否有可能从responseType响应中获取“原始”(文本/数据)?

我认为可以有条件地使用overrideMimeType对同一个URL进行另一个请求,但这可能是不明智的--对于服务器日志或任何其他进程。

下面是一个示例:

代码语言:javascript
运行
复制
var xhr = new XMLHttpRequest();

xhr.open('GET','/some/path.wtf');
xhr.responseType = 'json';

xhr.onloadend = function()
{
  if (this.status !== 200)
  {
    console.log(this.response);  // null
    // send the response-text to an error handler .. sigh :(
    return;
  }
};

xhr.send();

在我的项目的实际代码中,对“/文件夹/path/”的请求被视为对JSON的请求,服务器使用JSON进行响应;除非出现问题,或者调用client.console.log()例程进行调试/测试。

如有任何意见将不胜感激,谢谢。

EN

回答 1

Stack Overflow用户

发布于 2017-02-05 07:17:24

以下是该问题的解决方案;然而,这是一个解决方案-but 可能会对面临相同问题的其他人有所帮助:

代码语言:javascript
运行
复制
var pth,ext,rsp,xhr;

pth = '/some/path/';
rsp = ((path.substr(-1) == '/') ? 'json' : 'blob');  // for example
xhr = new XMLHttpRequest();

xhr.patchJSON = ((rsp == 'json') ? 1 : 0);
xhr.open('GET',pth);
xhr.responseType = ((rsp == 'json') ? 'text' : rsp);

xhr.onloadend = function()
{
  if (this.status !== 200)
  {
    console.log(this.response);  // response-text from server
    // send the response-text to an error handler .. yayy :)
    return;
  }

  if (this.patchJSON)
  {
    rsp = JSON.parse(this.response);

    if ((rsp === null) && (this.response.trim().length > 0))
    {
      console.log('json syntax error in: '+pth);
      // send `rsp` to the error handler
      return;
    }
  }

  // handle blobs/markup/etc, -or:
  console.log(rsp);
};

xhr.send();

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42002819

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档