Javascript React Native Expo-can';t将数据发送到php文件

Javascript React Native Expo-can';t将数据发送到php文件,javascript,php,html,react-native,expo,Javascript,Php,Html,React Native,Expo,我正在参加React Native Expo,我尝试使用现有的MySql数据库中的数据构建用户登录。我可以连接到数据库,如果我的php文件中有硬编码的用户名和密码,我会得到一个正确的反馈回我的应用程序 我的登录类(重要部分) class LoginActivity扩展组件{ //设置登录活动标题。 静态导航选项= { 标题:“物流活动”, }; 建造师(道具){ 超级(道具) 此.state={ 用户名:“”, 密码:“”, 孤岛加载:正确 } } UserLoginFunction=asyn

我正在参加React Native Expo,我尝试使用现有的
MySql
数据库中的数据构建用户登录。我可以连接到数据库,如果我的php文件中有硬编码的用户名和密码,我会得到一个正确的反馈回我的应用程序

我的登录类(重要部分)

class LoginActivity扩展组件{
//设置登录活动标题。
静态导航选项=
{
标题:“物流活动”,
};
建造师(道具){
超级(道具)
此.state={
用户名:“”,
密码:“”,
孤岛加载:正确
}
}
UserLoginFunction=async()=>{
const{username}=this.state;
const{password}=this.state;
let body=JSON.stringify({username,password})
const formData=new formData();
formData.append('username',username);
formData.append('password',password);
console.log(“formData:+body”);
待命https://example.com/User_Login.php', {
方法:“POST”,
标题:{
“接受”:“应用程序/json”,
//“内容类型”:“应用程序/json”,
“内容类型”:“多部分/表单数据”
},
正文:formData
/*stringify({//这里是有趣的部分。把你的数据放在这里。
“用户名”:this.state.username,
“密码”:this.state.password
}) */
}).then((response)=>response.text())/.json()
.then((responseJson)=>{console.log(“响应:+responseJson”);
//如果服务器响应消息与数据匹配
如果(responseJson==='ok')
{
警惕(“耶!”);
//然后打开配置文件活动并向配置文件活动发送用户电子邮件。
//this.props.navigation.navigate('Home',{username:username});
}
否则{
警惕,警惕(responseJson);
}
}).catch((错误)=>{
控制台错误(error);
});
}
render(){
返回(
登录
this.setState({username})}
“透明的”
style={style.TextInputStyleClass}
/>
this.setState({密码:TextInputValue})}
“透明的”
style={style.TextInputStyleClass}
secureTextEntry={true}

/>
问题是您想要发送一个JSON请求,但实际上您正在发送一个FormData请求,并且
php://input
不适用于FormData请求

要修复此问题,请删除
formData
,并更改您的获取请求,如下所示:

wait-fetch('https://example.com/User_Login.php', {
方法:“POST”,
标题:{
“接受”:“应用程序/json”,
“内容类型”:“应用程序/json”
},
正文:JSON.stringify({
“用户名”:用户名,
“密码”:密码
})
})

问题在于您正在使用表单数据请求发送数据,对于JSON请求,请在fetch config中使用以下命令并删除表单数据

body: JSON.stringify({
 'username': username,
 'password': password
})

您好,bug,谢谢您的帮助。您可以在我的代码中看到,您的想法实际上是我的第一次尝试(该部分被注释掉)。这也很好,当我输入硬编码的$username和$password时,我得到了响应。只有当我输入$username=$obj['username'];$password=$obj['password'];我得到了一个空结果。因此我认为transfer$json=file\u get\u contents('php://input');不起作用。在模拟器上不起作用,在设备上也不起作用。还有其他想法吗?考虑到这应该是正确的方法,试着在两侧调试主体,确保
用户名
密码
已填充,然后再将它们传递给
获取
,并查看在
$obj
中接收到的内容。如果您成功o从PHP解析主体,但用户名和密码是空的,我认为即使在获取时它们也是空的。