React Native 获取,意外令牌

React Native fetch, unexpected token

我正在尝试使用 fetch apiReact Native 中调用一个简单的 REST 服务。我是 运行 Android 上的应用程序。

当我调用 await response.json() 时,我得到

Unexpected token � in JSON at position 0

,我也尝试了 await response.text(),我得到的结果是:

��Mn�0��B�[C�bn�u��?@�+�bLR�ҌBR.� �����H�ծ�͛�#?>�g���t�%{���Z��؄u�>fs0]����H��'&��u�Z}��y�Z��2����i�d�G�>����R����6LL{j�j�7\���������d���L.���gٲXv�Lf��g�%T�~�\z�U8E܀���ڭ�c��@[G�;�T�������{�*�9�)��a½ ���0�组V:ϒ���/�K��3�ݝ����W: c�^UV@�B�7�@�v �+WG��@YL�|Ġ>q�=@�J}�3=��Q�]Հup^E�0 ^d'Ա �^���b�.��2,м���g2��R<���_rpV:!��<��^>�����{�e�#7m���nA�;n�������l�o�u��kW���r���

这是我正在使用的代码:

export function fetchMenu() {
  return async(dispatch) => {
    try {
      dispatch(menuRequest(true));
      console.log(Institucion.aplent);
      var response = await fetch('http://<page_url>/api/moviles/personalizacion', {
        compress: true,
        headers: {
          'aplentId' : Institucion.aplent,
          'Accept-Encoding' : 'gzip,deflate'
        }
      });
      console.log(response);
      if(!response.ok) throw Error(response.statusText);
      var data = await response.json();
      console.log('Data:', data);
      dispatch(menuSuccess(data));
    }
    catch(ex) {
      console.log(ex);
      dispatch(menuFailure(ex));
    }
  };
}

注意:出于安全原因,我已将 url 更改为,但我的代码中有正确的 url。

我试过使用和不使用 Accept-Encoding header,结果相同。

编辑

如果我在我的 REST API(在服务器上)中禁用 deflate 压缩,它工作正常,不获取支持 deflate 压缩?

将这些 headers 添加到提取调用中以确保您收到 JSON:

 'Content-Type': 'application/json',
  'Accept': 'application/json',

我建议在不显式设置压缩的情况下看看它是否有效。

如果你不设置Accept-encoding header,react native应该会自动压缩和解压它。所以可能让它处理它。而是尝试将其更改为 Accept header

export function fetchMenu() {
  return async(dispatch) => {
    try {
      dispatch(menuRequest(true));
      console.log(Institucion.aplent);
      var response = await fetch('http://<page_url>/api/moviles/personalizacion', {
        headers: {
          'aplentId' : Institucion.aplent,
          'Accept' : 'application/json'
        }
      });
      console.log(response);
      if(!response.ok) throw Error(response.statusText);
      var data = await response.json();
      console.log('Data:', data);
      dispatch(menuSuccess(data));
    }
    catch(ex) {
      console.log(ex);
      dispatch(menuFailure(ex));
    }
  };
}

这是服务器端的问题,我更改了api的压缩算法,效果很好