使用PHP写ajax接口

之前有学过php都是前后端没有分离的,所以也想去了解后端是怎么写出ajax接口的,可能问了别人或者上网找了很多资料都很有有点懵,或者说直接用TP或者lavarel这些后端框架去写,有时候看到这么多东西或者涉及的文件越多,就容易越乱,所以就想找一种简单明白一点的方法。这样可以方便自己平时做一些涉及简单的CURD的小项目。

有点简单,就两个文件:

  • main.php

    这个文件主要是用来写数据库连接的配置还有接口的逻辑。

  • api.php

    这个文件是用来管理所有接口还有访问响应的配置。

例子

在main.php里面配置好数据库连接,然后编写接口,示例:

main.php

<?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.php

<?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.html

<!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>

使用PHP写ajax接口的更多相关文章

  1. .net学习之Session、Cookie、手写Ajax代码以及请求流程

    1.IIS 7 以上版本集成了两种模式,一种是经典模式,一种是集成模式(直接将asp.net框架集成到IIS中) 2.浏览器和服务器端通过什么技术来实现的?Socket(套接字),通信的语法是HTTP ...

  2. 性能测试培训:Ajax接口级性能测试之jmeter版

    性能测试培训:Ajax接口级性能测试之jmeter版   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.在poptest认为工具 ...

  3. 微信小程序request(ajax)接口请求封装

    微信小程序request(ajax)接口请求封装 最近在进行小程序的编写,需要调用后端接口,经常要用到wx.request方法,所以就自己封装了一下,简化一下代码,如果能给大家提供帮助更好,在封装的时 ...

  4. 不借助jquery封装好的ajax,你能用js手写ajax框架吗

    不借助jquery封装好的ajax,你能手写ajax框架吗?最基础的ajax框架,一起来围观吧. .创建XMLHttpRequest对象 var xhr = new XMLHttpRequest(); ...

  5. web api写api接口时返回

    web api写api接口时默认返回的是把你的对象序列化后以XML形式返回,那么怎样才能让其返回为json呢,下面就介绍两种方法: 方法一:(改配置法) 找到Global.asax文件,在Applic ...

  6. 【Node.js】二、基于Express框架 + 连接MongoDB + 写后端接口

    在上节,我们讲了如何搭建express环境,现在我们说说如何通过node.js写服务接口给前端调用 1. 首先通过MongoDB建好数据库与表格 例如,我的数据库名字为db_demo,数据库表格为go ...

  7. 当使用cokie进行数据交互时候,cookie只需存储该对象的id即可不需要存放其他数据;只需在写个接口根据cookie里面的对象id来创建对象

    当使用cokie进行数据交互时候,cookie只需存储该对象的id即可不需要存放其他数据:只需在写个接口根据cookie里面的对象id来创建对象

  8. 用原生JavaScript写AJAX

    //原生js写ajax就像打电话 //打电话分下面4步//1.拿出手机//2.拨号//3.说话//4.听对方说话 //ajax也分下面4步//1.创建ajax对象//2.连接到服务器//3.发送请求( ...

  9. 原生js写Ajax

    //原生js写ajax就像打电话 //打电话分下面4步//1.拿出手机//2.拨号//3.说话//4.挺对方说话 //ajax也分下面4步//1.创建ajax对象//2.连接到服务器//3.发送请求( ...

随机推荐

  1. ThinkPHP5入门(四)----模板篇

    一.模板访问 1.没有参数传递 $view = new View(); return $view->fetch(); 此时默认访问的模板路径为:[模板文件目录]/当前控制器名(小写+下划线)/当 ...

  2. SpringBoot+MyBatis中自动根据@Table注解和@Column注解生成增删改查逻辑

    习惯使用jpa操作对象的方式,现在用mybatis有点不习惯. 其实是懒得写SQL,增删改查那么简单的事情你帮我做了呗,mybatis:NO. 没办法,自己搞喽! 这里主要是实现了通过代码自动生成my ...

  3. EF Core 2.1 支持数据库一对一关系

    在使用EF Core和设计数据库的时候,通常一对多.多对多关系使用得比较多,但是一对一关系使用得就比较少了.最近我发现实际上EF Core很好地支持了数据库的一对一关系. 数据库 我们先来看看SQL ...

  4. Android解析json数据

    Json数据 [{"code":"110000","sheng":"11","di":"0 ...

  5. 转:SQLServer中的GROUPING,ROLLUP和CUBE

    转自:https://www.cnblogs.com/nikyxxx/archive/2012/11/27/2791001.html 聚集函数:GROUPING 用于汇总数据用的运算符: ROLLUP ...

  6. CentOS6安装各种大数据软件 第十章:Spark集群安装和部署

    相关文章链接 CentOS6安装各种大数据软件 第一章:各个软件版本介绍 CentOS6安装各种大数据软件 第二章:Linux各个软件启动命令 CentOS6安装各种大数据软件 第三章:Linux基础 ...

  7. Mysql双向同步热备份设置

    1.环境描述. 主机:103.241.49.137(A) 主机:103.240.182.191(B) MYSQL 版本为5.1.112.授权用户.(本人比较懒,直接用的root 跳过这一步)A:mys ...

  8. 大数据学习--day15(常用类:Date--DateFormat--SimpleDateFormat--File--包装类)

    常用类:Date--DateFormat--SimpleDateFormat--File--包装类 这些常用类就不像字符串挖那么深了,只列列用法. 时间处理: /** * 时间处理类 * DateFo ...

  9. CTF-安恒19年二月月赛部分writeup

    CTF-安恒19年二月月赛部分writeup MISC1-来玩个游戏吧 题目: 第一关,一眼可以看出是盲文,之前做过类似题目 拿到在线网站解一下 ??41402abc4b2a76b9719d91101 ...

  10. Python学习笔记十一:模块

    标准库(内置模块) time与datetime 模块 时间表示方式 1.时间戳 2.格式化的字符串 3.元组形式 时间戳就是一个秒数 x=time.time(),从1970年1月1日0时0分0秒到现在 ...