我构建一个react-native应用程序并使用fetch api来处理服务器请求,如果从服务器返回的json不为null,它工作正常,但如果来自服务器的响应为null,它将给我一个错误 - “Json Parse错误:意外的EOF”,下面是我用于获取的代码,我试图在调试时设置断点,看看当从服务器返回null时响应的内容,我无法找到在解析它之前,我可以对其进行一些检查并查看响应是否为空,所以需要帮助
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);
});
答案 0 :(得分:0)
有一个很好的答案here,但就我而言,我需要在response.text()返回之后访问响应对象:
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);
}
答案 1 :(得分:0)
如果 json 响应 null
而不是使用 response.json() 使用 response.text()
fetch(path)
.then(function (response) {
return response.text()
}).then(function (data) {
resolve(data.length == 0 ? null : JSON.parse(data))
}).catch(err => {
reject(err);
})
答案 2 :(得分:0)
如果您想检查是否为空的响应请求:
const response = await fetch(url, options); // your url and options
if (response.ok) {
const contentType = response.headers.get('content-type');
if (contentType && contentType.indexOf('application/json') !== -1) {
const json = await response.json();
successCb(json); // Write your script.
} else {
successCb(); // if the request is successful but the response is empty. Write your script.
}
}