这是我的功能
不知道问题出在哪里
fetchData() {
fetch(REQUEST_URL, {
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
},
body: JSON.stringify({
Request : 'menu',
active : '1',
})
}).then((response) => response.json())
.then((responseData) => {
this.setState({
menu: responseData.Response,
});
})
.catch((error) => {
console.warn('error',error);
})
.done();
}
请指出功能
中的问题答案 0 :(得分:5)
错误发生,因为您的响应无法转换为JSON格式。由于错误的标头,响应正文或基于您的服务器的其他各种原因,可能会发生此问题。要做的事情 - 因为显然响应不一致 - 是在尝试将响应转换为JSON之前执行服务器响应的额外验证。
您可以通过替换:
.then((response) => response.json())
与
.then((response) => {
// In this case, we check the content-type of the response
if (response.headers.get('content-type').match(/application\/json/)) {
return response.json();
}
return response;
// You can also try "return response.text();"
})
答案 1 :(得分:2)
The error will be occcurs because your response can not be casted to be JSON
format.
there are three type of php mysqli api formate
1 formData
2 xml
3 json
i think you are use Formdata api but you are request in json see formdata
example
1) json Request.. example
var Request = {
security:1,
token: token,
email: this.state.username,
password: this.state.password
};
console.log(JSON.stringify(Request));
fetch(API.login, {
method: "POST",
headers: {
Accept: "application/json",
"Content-Type": "application/json"
},
body: JSON.stringify(Request)
})
.then(res => res.json())
.then(res => {
console.log("Login RESPONCE::: ", res);
}
2)Formdata Example use form data i think your error will be solve
let formdata = new FormData()
formdata.append("Api variable",your post variable)
formdata.append("name",this.state.name)
formdata.append("email, this.state.email)
formdata.append("password",this.state.password)
fetch('http://192.168.1.116/Restaurants/Registration.php', {
method: 'POST',
headers: {
'Content-Type': 'multipart/form-data'
},
body:formdata
}).then(res => res.json())
.then(res => {
console.log('Data RESPONCE::', res);
}
答案 2 :(得分:1)
then((response) => response.json())
^^^^^^^^^^^^^ I think this is the problem
当您使用fetch API时,状态代码不等于2xx的响应将不会进入catch
,因此您可以JSON.parse某些内容,例如HTML页面或纯文本流。
在将响应解析为JSON之前,应检查是否response.ok === true
。
答案 3 :(得分:0)
此错误的可能原因是您的服务器未返回无效JSON的内容(可能根本不是JSON,如404页面或类似内容)。
答案 4 :(得分:0)
如果您将请求Content-Type设置为application/json
,则可能会发送预检请求以检查CORS。
在我的React应用程序(不是React-Native)中,我遇到了跨域问题。我的服务器不支持预检请求,因此响应如下:
{
body: null,
status: 0,
ok: false,
}
导致response.json()
失败,即使我在Chrome开发工具中获得了预期的JSON响应。
就我而言,我将请求Content-Type更改为application/x-www-form-urlencoded
,不需要预检请求。它按预期工作。
这可能对您的情况没有帮助,但我希望它能给您一些见解。
答案 5 :(得分:0)
记录responseData。 API可能会返回无效数据。