0

Hello everyone I'm trying to develop an android app.

I tried to connect the app to the remote mysql server with php using axios (it works when i run the code with vuejs on web.)

here is the Vue-native code;

      fetchAllData:function(){
      axios.post('db.php', {
      action:'fetchall'
      }).then(function(response){
      app.allData = response.data;
      });

here is the db.php file:

$received_data = json_decode(file_get_contents("php://input"));
$data = array();
if($received_data->action == 'fetchall')
{
 $query = "
 SELECT * FROM users ";
 $statement = $connect->prepare($query);
 $statement->execute();
 while($row = $statement->fetch(PDO::FETCH_ASSOC))
 {
  $data[] = $row;
 }
 echo json_encode($data);
}

and here is the error:

Error's screenshoot

4

1 回答 1

0

您遇到的错误是网络错误,表示您没有互联网连接或端点无法访问。

您是否尝试连接到有效的端点?

您可以像这样在 axios 中设置端点:

export const apiParams = {
  baseURL: 'YOUR URL HERE',
  timeout: 20000,
  withCredentials: true
}
const api = axios.create(apiParams)

导出后您可以轻松使用

api.post('db.php', { data });

基本上未处理的承诺拒绝是要说 axios.post 是一个承诺,如果它被拒绝,你应该处理它的错误。

尝试将 axios.post 放在 try catch 块中,您可以像这样使用 ES6 async/await:

methods: {
      async fetchAllData() {
        try {
          await axios.post('db.php', {
            action: 'fetchall'
          })
          app.allData = response.data
        } catch (error) {
          console.log(error)
        }
      }
    },

或者你可以使用老式的方式错误处理与catch,但我不建议使用它,如果你有一个promise链,最好使用async/await作为上面的例子。

methods: {
      fetchAllData() {
        axios
          .post('db.php', {
            action: 'fetchall'
          })
          .then(function(response) {
            app.allData = response.data
          })
          .catch(err => {
            console.log(err)
          })
      }
    },

阅读有关 then/catch 的承诺处理 https://javascript.info/promise-error-handling 异步等待: https ://javascript.info/async-await

在您解决网络错误之前,promise 拒绝应该消失,但您的控制台日志中会出现一个已处理的错误。

于 2020-10-20T13:29:05.407 回答