Flutter 提交数据到http.post超时问题

问题描述 投票:0回答:1

我有一个 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';
      });
    }
}
php flutter post
1个回答
0
投票

明智地增加超时: 如果偶尔出现超时问题是由于服务器有时需要较长的响应时间,您可以考虑稍微增加超时时间。

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
   }
}
© www.soinside.com 2019 - 2024. All rights reserved.