我对Flutter有点陌生,我正在构建一个屏幕,该屏幕将数据发布到托管服务器中的PHP内置的API中。该API是由我构建的,该API接收JSON对象,然后保存数据。
该应用程序运行正常,并且API正在接收数据,但是http.post似乎触发了两次(两次调用API)
这使我的API将记录保存了两次。添加发送记录之前,我无法进行任何检查。因为我的API只是保存了一条新记录,所以每当收到呼叫时,它都会保存该记录并返回移动应用程序(内置于Flutter)的值。
如果我使用条件进行检查,则第一个调用将向移动应用返回正确的数据,但是第二个调用将为移动应用返回错误,因为该记录已经存在。
我已经阅读了有关Access-Control-Allow-Origin的信息,并可能是问题所在,并将其放在我的.httaccess文件中
<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin "*"
</IfModule>
但是没有运气。
任何想法。
注意,我正在使用共享主机。
在Flutter中使用的代码:
class _PostADToServerState extends State<PostADToServer> {
Future<List<JSBResponse>> _postRequest() async {
// print('Call API function is called');
Map<String, dynamic> myAd = {
"isbn10": widget.title.isbn10,
"isbn13": widget.title.isbn13,
... [Some fields]
"titleCondition": widget.title.titleCondition,
"priceIs": widget.title.priceIs,
"school_name": widget.title.schoolName
};
String json = jsonEncode(myAd);
var url = 'https://www.example.com/xapis/save_new_ad.php';
var body = json;
var data = await http.post(url,
headers: {
"Content-Type": "application/json",
"accept": "application/json",
"Access-Control-Allow-Origin": "*",
},
body: body);
var jsonData = jsonDecode(data.body);
PHP API中的代码以以下内容开头:
$data = file_get_contents('php://input');
$theTitle = json_decode($data);
然后,我将在$ theTitle对象中找到的内容用作以下内容:
$title = $theTitle->title;