我正在尝试使用 React Native 中的 fetch api 来调用简单的REST服务。我在 Android 上运行该应用。
当我致电await response.json()
时,我得到了
位于0的JSON中的意外标记<
,我也尝试了await response.text()
,我得到了这个结果:
Mn0B [CBNU?@ +bLRҌBR。 ħծ͛#&GT; GT%{ZU&GT; 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));
}
};
}
注意:出于安全原因,我已更改了网址,但我在代码中输入了正确的网址。
我尝试使用和不使用Accept-Encoding标头,结果相同。
修改
如果我在REST API中禁用deflate压缩(在服务器上)它可以正常工作,不能获取支持deflate压缩吗?
答案 0 :(得分:2)
将这些标题添加到fetch调用中以确保您收到JSON:
'Content-Type': 'application/json',
'Accept': 'application/json',
答案 1 :(得分:0)
我建议在没有明确设置压缩的情况下查看它是否有效。
如果您未设置Accept-encoding
标头,则本机应自动压缩并解压缩。所以可能让它处理它。而是尝试将其更改为Accept
标题
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));
}
};
}
答案 2 :(得分:0)
这是一个服务器端问题,我更改了api的压缩算法,并且运行良好