JavaScript fetch - 无法在“Response”上执行“json”:主体流已锁定

jsJavaetc

1个回答

写回答

18381087927

2025-07-09 21:01

+ 关注

Java
Java

使用JavaScript的fetch方法可以轻松地从网络上获取数据。然而,在某些情况下,当我们试图将响应转换为JSON格式时,可能会遇到一个错误提示:无法在“Response”上执行“JSon”:主体流已锁定。这个错误提示可能会让人感到困惑,因此我们需要了解这个问题的原因以及如何解决它。

当我们使用fetch方法获取一个响应时,响应对象包含了一些有用的方法,比如JSon()方法,可以将响应转换为JSON格式。然而,这个方法只能在响应的主体流还未被读取时使用。一旦我们读取了响应的主体流,就不能再次使用JSon()方法。

那么为什么会出现这个错误呢?这通常是因为我们在获取响应后,已经对其进行了一些处理,比如读取了响应的text()或者blob()方法。这些方法会从响应中读取主体流,使得JSon()方法无法再次使用。

为了解决这个问题,我们可以使用一种简单的方法。我们可以将响应的主体流存储在一个变量中,然后分别使用text()或者blob()方法和JSon()方法来处理这个变量。这样,我们就可以避免错误提示:主体流已锁定。

下面是一个使用fetch方法获取数据,并将其转换为JSON格式的示例代码:

Javascript

fetch('https://api.example.com/data')

.then(response => {

const body = response.clone();

return body.text();

})

.then(data => {

console.log('Response body:', data);

return JSON.parse(data);

})

.then(JSonData => {

console.log('JSON data:', JSonData);

})

.catch(error => {

console.log('Error:', error);

});

在上面的代码中,我们首先使用response.clone()方法将响应的主体流存储在一个变量body中。然后,我们使用body.text()方法来读取主体流并打印出来。接下来,我们使用JSON.parse()方法将主体流转换为JSON格式,并打印出来。

通过这种方式,我们可以避免出现“无法在“Response”上执行“JSon”:主体流已锁定”的错误提示,并成功地将响应转换为JSON格式进行处理。

使用JavaScript的fetch方法可以轻松地从网络上获取数据,并将其转换为JSON格式。然而,在使用JSon()方法时,我们可能会遇到一个错误提示:无法在“Response”上执行“JSon”:主体流已锁定。这个错误提示通常是因为我们在获取响应后,已经对其进行了一些处理,导致主体流被锁定。为了解决这个问题,我们可以将响应的主体流存储在一个变量中,并分别使用text()或者blob()方法和JSon()方法来处理这个变量。这样,我们就可以成功地将响应转换为JSON格式进行后续处理。

举报有用(4)分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号