ajax与pdo结合获取json值

最今在开发一个简单的购物网站,所以在自己写php代码结合mysql来做一些查询啊,上传的操作,我对php其实不太熟悉,只会写点简单的代码来和js结合,做ajax传值。

PDO预查询

以前我都是用的mysql查询,后来才知道那是非常过时的产物,后来学了一点mysqli,再后来终于还是觉得pdo最好用了。一般我都是用的pdo预查询语句:

try {
    $conn = new PDO("mysql:host=$server;dbname=$dbname",$username,$password);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $stmt = $conn->prepare("select * from user where uid = :uid");
    $stmt->bindParam(":uid",$_POST["uid"]);
    $stmt->execute();
    $result = $stmt->fetchAll();
}catch(PDOException $e){
    echo $e->getMessage();
}

这个语句对于我来说是万能的,不管需不需要传值,我都会用这个来查询结果,其中的参数是用的$_POST[“uid”],获取查询的结果用到了fetchAll();但是其实我们一般在用ajax获取json数据的时候要加上参数 fetchAll(PDO::FETCH_ASSOC);这样才会获取到我想要的结果。

ajax 与 pdo

我们ajax获取的一般都是json数据格式的数据,所以我们要对上面的代码做一些小的修改:

try {
    $conn = new PDO("mysql:host=$server;dbname=$dbname",$username,$password);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $stmt = $conn->prepare("select * from user where uid = :uid");
    $stmt->bindParam(":uid",$_POST["uid"]);
    $stmt->execute();
    $result = $stmt->fetchAll(PDO::FETCH_ASSOC);
    echo json_encode($result);
}catch(PDOException $e){
    echo $e->getMessage();
}

但是这样穿到js里面的值会被当作字符串,我们需要在ajax选项中添加额外的参数

$.ajax({
    url: "pid.php",
    method: "post",
    data: {"uid","123"},
    dataType: "json"
})

这样我们获取到的才是正常的json字符串。
记住:

  • 服务端使用 json_encode();
  • 客户端使用 dataType: “json”;