我有一个 flutter 应用程序,其中数据通过 http.post 提交到 php/mysql 服务器。然后数据被插入到数据库中。通常一切正常,并且我内置了一个超时,如果超过时间,它会向 flutter 客户端返回“无法连接”错误。
偶尔,应用程序会超时,但数据仍然会提交和插入。我认为数据已发布到服务器,但由于某种原因未及时收到响应。
寻求帮助或想法,了解如何使我的代码更好地处理这个问题,而不只是增加超时。谢谢。
postData() async {
const url = 'https://www.testdomain.com/app/submit.php';
try {
final response = await http.post(Uri.parse(url), body: {
"id": user,
"notes": notesController.text
}).timeout(const Duration(seconds: 4), onTimeout: () {
//Time has run out
return http.Response('Error', 408);
});
if (response.statusCode == 408) {
if (!mounted) return;
setState(() {
status = '1';
});
} else if (response.statusCode == 200) {
final auth = json.decode(response.body);
if (!mounted) return;
setState(() {
success = auth[0]['success'].toString();
status = auth[0]['status'].toString();
});
} else {
if (!mounted) return;
setState(() {
status = '1';
});
}
} catch (e) {
if (!mounted) return;
setState(() {
status = '1';
});
}
}
明智地增加超时: 如果偶尔出现超时问题是由于服务器有时需要较长的响应时间,您可以考虑稍微增加超时时间。
final response = await http.post(Uri.parse(url), body: {
"id": user,
"notes": notesController.text
}).timeout(const Duration(seconds: 10), onTimeout: () {
// Handle timeout appropriately
});
检查服务器端超时:
<?php
// Set the maximum execution time
set_time_limit(150);
//Other Your Code
// ...
?>
重要:检查回复确认:
在 PHP 代码中,成功将数据插入数据库后:
echo json_encode(["success" => true, "message" => "Data successfully inserted"]);
在您的 Dart 代码中:
if (response.statusCode == 200) {
final auth = json.decode(response.body);
if (auth["success"]) {
// Data was successfully inserted
} else {
// Check Other Http Statuses
}
}