javascript - php mysqli fetch_all()正常回傳json, 前端ajax卻拿不到json?
淡淡烟草味
淡淡烟草味 2017-05-16 13:11:56
0
1
931

php程式碼

<?php
//include "db_connect.php";
$db = new MySQLi("localhost", "root", "password", "paginate");
$db->set_charset('utf8mb4');

header('Content-type: application/json;charset=utf-8');

$total            = 0;   // 表格数据总行数
$per_page         = 6;   // 每页行数
$current_page     = 1;   // 当前显示第几页
$total_pages      = 0;   // 总页数

// 获取当前页数
if (!empty($_GET['current_page'])) {
  $current_page = $_GET['current_page'];
}

// 获取表格数据总行数
$query1 = 'select count(*) from user';
$row1   = $db->query($query1);
if ($row1 && $rowd = $row1->fetch_row()) {
  $total = $rowd[0];
}

// 获取总页数
$total_pages = ceil($total / $per_page);

// 分页
$pre = ($current_page - 1) * $per_page;
$query2 = "select * from user limit $pre,$per_page";
$rows = $db->query($query2);

$arr = [];
if($rows) {
  $arr = $rows->fetch_all(MYSQLI_ASSOC);
}
$pagination = [
  'total'         => $total,
  'per_page'      => $per_page,
  'current_page'  => $current_page,
  'total_pages'   => $total_pages
];

array_push($arr, $pagination);
echo json_encode($arr, true);

postman截圖:

js程式碼:

 window.onload = function () {
        getData(1);
    }

    function addURLParam(url, name, value) {
        url += (url.indexOf("?") == -1 ? "?" : "&");
        url += encodeURIComponent(name) + "=" + encodeURIComponent(value);
        return url;
    }
    
    function getData(page) {
        var data = document.getElementById("data");

        var xhr = new XMLHttpRequest();
        xhr.onreadystatechange = function () {
            if (xhr.readyState == 4 && xhr.status == 200) {
                var jsonText = xhr.responseText;
                console.log(JSON.parse(jsonText));
            }
        }
        var url = "paginate.php";
        url = addURLParam(url, "current_page", "page");
        xhr.open("get", url, true);
        xhr.send();
    }

chrome console前面的資料庫的內容都沒有

應該是

$query2 = "select * from user limit $pre,$per_page";
$rows = $db->query($query2);

$arr = [];
if($rows) {
  $arr = $rows->fetch_all(MYSQLI_ASSOC);
}

這裡的sql出了問題,因為沒加if($rows)之前會有錯,然而我很奇怪為什麼php可以正常運行,php版本是7.0.8

淡淡烟草味
淡淡烟草味

全部回覆(1)
巴扎黑

是js 沒有正確傳遞參數進addURLParam()的問題

url = addURLParam(url, "current_page", "page");

改為

url = addURLParam(url, "current_page", page);

說起來真是羞恥,我發布問題後發現了這個bug,編輯修改了一次問題,但是學校斷電電腦已經沒電了,然後我就沒能測試。 。 。 。 。 。


不過重點是addURLParam方法我是最後才加的,原來是直接

xhr.open("get",  "paginate.php?current_page="+page, true);

addURLParam()是js高階程式設計上的方法,裡面說

使用GET請求常常會發生的一個錯誤,就是查詢的字串格式有問題。查詢字串中每個參數的名稱和值都必須使用encodeURIComponent()進行編碼,然後才能放到URL的結尾

知道原因的朋友可以就這點解答下,我先去搜尋了~

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板