Javascript 如何在fetchapi中处理空响应
我正在构建一个react本机应用程序,并用于处理服务器请求,如果从服务器返回的json不为null,则工作正常,但如果从服务器返回的响应为null,则会给我一个错误-“json解析错误:意外的EOF”,下面是我用于获取的代码,我试图在调试时设置断点,以查看从服务器返回null时响应的内容,我找不到可以在解析之前检查响应是否为null的内容,因此需要帮助Javascript 如何在fetchapi中处理空响应,javascript,json,react-native,fetch,Javascript,Json,React Native,Fetch,我正在构建一个react本机应用程序,并用于处理服务器请求,如果从服务器返回的json不为null,则工作正常,但如果从服务器返回的响应为null,则会给我一个错误-“json解析错误:意外的EOF”,下面是我用于获取的代码,我试图在调试时设置断点,以查看从服务器返回null时响应的内容,我找不到可以在解析之前检查响应是否为null的内容,因此需要帮助 return fetch(url, //service url{ method: type, // get or post hea
return fetch(url, //service url{
method: type, // get or post
headers: {
'Accept': 'application/json',
'Content-Type': contentType,
},
body: data //some input parameters
}).then((response) => {
return response.json();
})
.then((responseJson) => {
request.onSuccess(responseJson); // success callback
})
.catch((error) => {
request.onError(error); // error callback
console.error(error);
});
有一个很好的答案,但在我的例子中,我需要在response.text()返回后访问response对象:
如果json响应
null
而不是使用response.json()则使用response.text()
fetch(路径)
.然后(功能(响应){
返回response.text()
}).then(功能(数据){
解析(data.length==0?null:JSON.parse(data))
}).catch(错误=>{
拒绝(错误);
})
只需尝试/捕获response.json()
。如果失败,您知道您得到了正确的响应,但不是有效的JSON,并且可以相应地重新路由。(fetch API的.catch
部分不用于捕获抛出,而仅用于捕获真实的网络/请求错误)检查以下内容:
function buildResult(response) {
// response.json() crashes on null response bodies
// return {
// data: response.json(),
// identityToken: response.identityToken // sliding expiration...
// };
return new Promise((resolve, reject) => {
response.text().then(body => {
resolve({
data: body.length ? JSON.parse(body) : null,
identityToken: response.identityToken // sliding expiration...
});
}).catch(err => {
reject(err);
});
});
}
//
// the api fetch function
//
function apiFetch(url) {
return fetch(url)
.then(checkStatus)
.then(parseIdentityToken)
.then(buildResult);
}