使用PHP寫ajax接口

使用PHP寫ajax接口

以前有學過php都是先後端沒有分離的,因此也想去了解後端是怎麼寫出ajax接口的,可能問了別人或者上網找了不少資料都頗有有點懵,或者說直接用TP或者lavarel這些後端框架去寫,有時候看到這麼多東西或者涉及的文件越多,就容易越亂,因此就想找一種簡單明白一點的方法。這樣能夠方便本身平時作一些涉及簡單的CURD的小項目。php

有點簡單,就兩個文件:css

  • main.php
    這個文件主要是用來寫數據庫鏈接的配置還有接口的邏輯。html

  • api.php
    這個文件是用來管理全部接口還有訪問響應的配置。mysql

例子

在main.php裏面配置好數據庫鏈接,而後編寫接口,示例:

main.phpjquery

<?php
header('Content-Type: text/html;charset=utf-8');
class Main{
    // 配置數據庫鏈接
    public function conn(){
        // (主機,帳號,密碼,數據庫,端口號)
        $conn = new mysqli('localhost','root', '123456','test');
        $conn->set_charset("utf8");
        // 檢測鏈接 
        // if ($conn->connect_error) { die("數據庫鏈接失敗: " . $conn->connect_error); } echo "數據庫鏈接成功";
        return $conn;
    }
    // 測試接口
    public function test(){
      $a = $_POST['a'];
        return json_encode(array('error' => 200, 'msg' => '接口鏈接成功','a'=>$a));
      }
    }
    // 測試數據庫查詢
    public function testSql(){
      // 獲取post過來的data
      $id = $_POST['id'];
      // 判斷是否傳值
      if(!$id){
        return json_encode(array('error' => 500, 'msg' => '參數缺失'));
      }
      // 定義數據庫鏈接
      $conn = $this -> conn();
      // 創建數據庫查詢語句
      $search = "SELECT * FROM `test` WHERE `id` = $id";
      // $search = "SELECT * FROM `test`";      
      // 執行數據庫查詢語句(返回查詢結果)
      $result = $conn -> query($search);
      // 遍歷結果成數組
      if(!$result) {
        return json_encode(array('error' => 444, 'msg' => '無數據'));
      } else {
        while($row = mysqli_fetch_array($result, MYSQL_ASSOC)) {
          $arr[]=$row;
        }
        // 輸出查詢結果
        return json_encode(array('error' => 200, 'data' => $arr));
      }
    }
}
?>

在api.php中添加接口列表

其實就是在接口鏈接使用?xxx=xxx這種方式發送一個參數,而後經過這個參數判斷要請求的接口是哪個
api.phpajax

<?php
    header('Content-Type: text/html;charset=utf-8');
    // 指定容許其餘域名訪問
    header('Access-Control-Allow-Origin:*');
    // 響應類型  
    header('Access-Control-Allow-Methods:POST');
    // 響應頭設置  
    header('Access-Control-Allow-Headers:x-requested-with,content-type');
    
    require_once('main.php');
     
    $type = @$_GET['type'];
    $main = new Main();
    if($type == 'test'){
      echo $main -> test();
    }
    elseif($type == 'testSql'){
      echo $main -> testSql();
    }
?>

調用接口

index.htmlsql

<!DOCTYPE html>
<html lang="zh">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>測試接口</title>
    <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
</head>

<body>
    <script>
        $.ajax({
            url: 'api.php?type=test',
            type: 'post',
            data: {
                a: '123'
            },
            dataType: 'JSON',
            success: function (data) {
                console.log(data);
            }
        });
        $.ajax({
            url: 'api.php?type=testSql',
            type: 'post',
            data: {
                id: 1
            },
            dataType: 'JSON',
            success: function (data) {
                console.log(data);
            },
            error: function(err) {
                console.log(err)
            }
        });
    </script>
</body>

</html>
相關文章
相關標籤/搜索