【发布时间】:2019-10-24 23:08:14
【问题描述】:
我尝试过使用 fetch 或 axios 以 POST 到我的服务器的不同方式,但似乎帖子正文变为空。我的初始代码是这样的。 所以与服务器的连接很好。我已将服务器配置为响应接收到的 $_POST 变量,但 $_POST 返回为空。当我在 body 上使用 JSON.stringify 时会发生这种情况。我也尝试过使用 FormData,它可以正常工作,但仅适用于 iOS。在我的 Android 设备和模拟器上,我收到 Possible Unhandled Promise: Network request failed 错误(https 和 http)。 我想让它同时在 iOS 和 Android 上运行。所以到目前为止,我只能在 iOS 上使用 formData 发送帖子。
任何适用于 Android 和 iOS 的解决方案?
import FormData from "FormData";
export const login = (emailUsername, password) => {
var formData = new FormData();
formData.append("emailUsername", emailUsername);
formData.append("password", password);
return async dispatch => {
const response = await fetch(
"https://myserver.net/api/app/auth.php",
{
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify({
emailUsername:emailUsername,
password:password
})
}
);
if (!response.ok) {
throw new Error("Something went wrong!");
}
const resData = await response.json();
console.log(resData);
};
};
【问题讨论】:
-
您是否尝试过使用 Postman 之类的工具来确保您的服务器没有配置错误并且不会以某种方式剥离
POST正文?例如,我知道301重定向https有时会发生这种情况。 -
我已经测试过服务器,它工作正常,服务器上没有错误。就像我说的。我已经设法在 iOS 上发送带有 body:FormData 的帖子,所以它可以工作,我知道这段代码应该可以正常工作,因为它适用于两种设备,但它没有。
-
FormData 是要走的路,除非您更喜欢更改后端,关键是您共享的 PHP 请求不会在
$_POST中填充您的帖子数据。如果你想得到它,你必须这样做:$post_data = json_decode(file_get_contents('php://input'));。向我们展示您的 FormData 尝试,它应该也可以在 Android 上运行 -
谢谢@bug。你的解决方案奏效了。我仍然不明白为什么在 $_POST 或 $_REQUEST 变量中没有收到它们。
-
没问题,原因是
$_POST是用来存储表单数据的,你发送的是JSON,它们是两种不同的格式,看看here看看这两个请求是怎么回事看起来像
标签: react-native post fetch