Chrome开发工具无法显示响应,即使返回的内容有标题content - type:text/html;utf - 8字符集=

为什么我的Chrome开发工具显示

未能显示响应数据

在响应时,返回的内容类型是文本/html?

在开发人员工具中查看返回的响应的替代方法是什么?

241109 次浏览

我认为这只发生在你有“保存日志”检查,你试图查看之前的请求的响应数据后,你已经导航离开。

例如,我查看了加载此堆栈溢出问题的响应。你可以看到。

Response Data

第二次,我重新加载了这个页面,但没有看header或Response。我导航到另一个网站。现在,当我查看响应时,它显示“加载响应数据失败”。

No Response Data

这是一个已知的问题,它已经存在了一段时间,并且有很多争论。

如果您正在执行跨域请求,而远程主机没有正确处理CORS报头,也可能发生“未能显示响应数据”的情况。检查js控制台的错误。

正如Gideon所描述的,这是Chrome的一个已知问题,已经开放了5年多,没有明显的兴趣来修复它。

不幸的是,在我的例子中,window.onunload = function() { debugger; }变通方法也不起作用。到目前为止,我发现的最好的解决办法是使用Firefox,它即使在导航之后也会显示响应数据。Firefox的devtools也有很多Chrome所没有的好特性,比如如果响应数据是html,语法会高亮显示,如果响应数据是JSON,则会自动解析。

对于那些在请求JSON数据时得到错误的人:

如果您正在请求JSON数据,JSON可能太大,这是导致错误发生的原因。

我的解决方案是复制请求链接到新选项卡(get请求从浏览器) 将数据在线复制到JSON查看器,在那里您可以自动解析并在那里工作

正如Gideon所描述的,这是一个已知的问题 对于使用window.onunload = function() { debugger; }代替
但是您可以在Source选项卡中添加断点,然后就可以解决您的问题。 是这样的: enter image description here < / p >

对于在请求大型JSON数据时收到此错误的人,正如Blauhirn所提到的,如果您使用身份验证头等,则不能在新选项卡中打开请求。

幸运的是,chrome确实有其他选项,如复制->复制为卷曲。 从commandoline通过cURL运行这个调用将是原始调用的精确复制 我将> ~/result.json添加到突击队的最后一部分,以将结果保存到文件中。 否则将输出到控制台

如果使用fetch发出AJAX请求,除非使用.text().json()等读取,否则不会显示响应。

如果你这样做:

 r = fetch("/some-path");

开发工具中不会显示响应 它会在你运行后显示:

r.then(r => r.text())

Bug仍然活跃。 这发生在JS成为新页面(200)或重定向(301/302)的启动器时 一种可能的方法来修复它-它禁用JavaScript请求。 例如,在puppeteer中,你可以在拦截request(page.on('request'))

时使用:page.setJavaScriptEnabled(false)

对于那些从谷歌来到这里的人,对于那些之前的答案没有解决谜团的人来说

如果使用XHR进行服务器调用,但不返回响应,则会发生此错误。

示例(来自Nodejs/React,也可以是js/php):

App.tsx

const handleClickEvent = () => {
fetch('/routeInAppjs?someVar=someValue&nutherVar=summat_else', {
method: 'GET',
mode: 'same-origin',
credentials: 'include',
headers: {
'content-type': 'application/json',
dataType: 'json',
},
}).then((response) => {
console.log(response)
});
}

App.js

app.route('/getAllPublicDatasheets').get(async function (req, res) {
const { someVar, nutherVar } = req.query;
console.log('Ending here without a return...')
});

Console.log将在这里报告:

Failed to show response data

为了解决这个问题,将返回响应添加到路由的底部(服务器端):

res.json('Adding this below the console.log in App.js route will solve it.');

另一种可能是服务器不处理OPTIONS请求。

一个解决方法是使用邮递员具有相同的请求url、头文件和有效负载。

它肯定会有响应。

对我来说,当返回的JSON文件太大时就会出现问题。

如果你只是想看响应,你可以在Postman的帮助下得到它。请看下面的步骤:

  1. 从chrome调试器中通过chrome开发工具->网络标签->找到请求->右键单击它->复制->复制为cURL。
  2. 打开邮递员,导入->Rawtext,粘贴内容。Postman将重新创建相同的请求。然后运行请求,您应该会看到JSON响应。 [Import cURL in postmain][1]: https://i.stack.imgur.com/dL9Qo.png .[导入cURL in postmain
如果你想减少API响应的大小,也许你可以在响应中返回更少的字段。对于mongoose,您可以通过在调用find()方法时提供字段名称列表轻松实现这一点。 例如,将方法从:

转换
const users = await User.find().lean();

:

const users = await User.find({}, '_id username email role timecreated').lean();

在我的例子中,有一个名为描述的字段,它是一个大字符串。从字段列表中删除它后,响应大小从6.6 MB减少到404 KB。

我有同样的问题,没有一个答案工作,最后我注意到我犯了一个巨大的错误,选择了other,因为你可以看到
enter image description here < / p >

现在这似乎是一个愚蠢的错误,但事情是即使在删除和重新安装chrome后,问题仍然存在(设置在删除chrome时默认不卸载),所以我花了一段时间,直到我发现这一点,并再次选择All…! 发生这种情况是因为我的后端不处理OPTIONS方法,因为我错误地单击了other,这导致我花了几天时间尝试答案!< / p >

使用firefox,它总是显示响应,并提供与chrome相同的工具。

只要响应的主体没有在你的代码中被消耗(例如使用.json().text()),它就不会显示在Chrome开发工具的预览选项卡中