如何在fetch api中处理null响应

时间:2016-09-08 19:45:37

标签: javascript json react-native fetch

我构建一个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);
    });

3 个答案:

答案 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.
  }
}