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

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

淡淡烟草味
淡淡烟草味

Antworte allen(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的末尾

知道原因的朋友可以就这点解答下,我先去搜索了~

Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage