帖子
帖子
用户
博客
课程
显示全部楼层
2
帖子
0
勋章
80
Y币

使用【端API】连接到自己的服务器数据库获取数据 - api.ajax

  [复制链接]
发表于 2015-3-1 16:14:48
本帖最后由 哈尼CC 于 2015-3-3 14:38 编辑

看到论坛友友需要,自己也需要就尝试了下。

使用api.ajax这个方法,官方文档地址:

http://docs.apicloud.com/%E7%AB%AFAPI/api【在Method中找ajax】

【首先】

1.如果想快速开发,没有自己的服务器,还是推荐使用云API的数据云。
2.不使用云API的数据云,可能是因为有web版且已经有商用数据。
3.不使用云API的数据云,需自己写数据接口,即客户端发送请求接收处理与生成json数据给客户端进行交互。
4.感谢APICloud提供新的APP开发方式。

其实也不难,使用api.ajax进行请求即可。PHPer,以下使用演示使用PHP,数据库使用Mysql,JAVA党或者.NET党请自行coding...

【连接到数据库(文件放在服务器上),服务器端输出JSON】

  1. <?php
  2. /*
  3. * 配置连接数据库信息
  4. */
  5. $host='localhost';//主机
  6. $user='root';//数据库账号
  7. $password='';//数据库密码
  8. $database='test';//数据库名
  9. //打开数据库连接
  10. $db=mysqli_connect($host,$user,$password,$database);
  11. //判断连接是否成功
  12. if($db){
  13.         $db->query("set names utf8");//设置UTF-8编码(JSON的唯一编码)
  14. }else{
  15.         echo 'DATABASE_CONNECTION_DIE';//数据库连接失败
  16.         exit;
  17. }
  18. //sql查询语句
  19. $sql="select id,name,sex,age from person";
  20. $result=$db->query($sql);
  21. while($row=$result->fetch_assoc()){
  22.         $person_info[]=$row;//将取得的所有数据赋值给person_info数组
  23. }
  24. echo json_encode($person_info);//输出JSON
  25. ?>
复制代码
输出的JSON示例:
  1. [{"id":"1","name":"\u54c8\u5c3c","sex":"\u7537","age":"22"},{"id":"2","name":"\u5c0f\u9648","sex":"\u5973","age":"21"},{"id":"3","name":"\u5c0f\u767d","sex":"\u672a\u77e5","age":"1"}]
复制代码
【测试用的数据库SQL语句】
  1. --
  2. -- Database: `test`
  3. --

  4. -- --------------------------------------------------------

  5. --
  6. -- 表的结构 `person`
  7. --

  8. CREATE TABLE IF NOT EXISTS `person` (
  9.   `id` int(11) NOT NULL,
  10.   `name` varchar(5) NOT NULL,
  11.   `sex` varchar(2) NOT NULL,
  12.   `age` int(3) NOT NULL,
  13.   PRIMARY KEY (`id`)
  14. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

  15. --
  16. -- 转存表中的数据 `person`
  17. --

  18. INSERT INTO `person` (`id`, `name`, `sex`, `age`) VALUES
  19. (1, '哈尼', '男', 22),
  20. (2, '小陈', '女', 21),
  21. (3, '小白', '未知', 1);
复制代码

搞定服务器端输出JSON后,重点来了...

【端API使用api.ajax读取接口数据】
  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4.     <meta charset="utf-8">
  5.     <meta name="viewport" content="maximum-scale=1.0,minimum-scale=1.0,user-scalable=0,width=device-width,initial-scale=1.0"/>
  6.     <title>test</title>
  7. </head>
  8. <body>
  9. <button onclick="showPersonInfo()">点我获取数据</button>
  10. </body>
  11. <script type="text/javascript" src="../script/api.js"></script>
  12.         <script>
  13.         function showPersonInfo(){
  14.                 api.showProgress();//显示加载进度框
  15.                 //使用api.ajax请求数据,具体使用方法和参数请看官方文档,这里使用get方法演示
  16.                 api.ajax({
  17.                 url:'http://192.168.0.10/get.php',//如果地址访问不到会请求出错,请填写自己的接口地址
  18.                 method:'get',
  19.                 cache:'false',
  20.                 timeout:30,
  21.                 dataTpye:'json',
  22.                 },function(ret,err){
  23.                 api.hideProgress();//隐藏加载进度框
  24.                 if(ret){
  25.                         for(var i=0;i<ret.length;i++){
  26.                         var html='<br>'+'ID:'+ret[i].id+'<br>'+'姓名:'+ret[i].name+'<br>'+'性别:'+ret[i].sex+'<br>'+'年龄'+ret[i].age;        
  27.                         document.write(html);
  28.                         }
  29.                 }else{
  30.                 api.alert({msg:('错误码:'+err.code+';错误信息:'+err.msg+'网络状态码:'+err.statusCode)});
  31.                 }
  32.                 });
  33.         }
  34.         </script>
  35. </html>
复制代码

OK,如果要POST方式,请自行参考官方文档。

思路就是这样,其它的依此类推:

客户端发送请求,服务器端接收处理后返回数据。

用户登录和状态检查推荐使用token检验,不要直接post密码。

老鸟勿喷,菜鸟成长中......

附件打包:

本帖子中包含更多资源,您需要 登录 才可以下载或查看,没有帐号?立即注册

X
2
帖子
0
勋章
80
Y币
君君芶 发表于 2015-3-3 21:49
嗯,这个我知道,但是php那边接收不到啊。。。

接收到后进行操作就知道有没有接收到了。
没接收到的话就是发送的参数不对了!
比如:
  1. <?php
  2. header('Content-type:text/html;charset=utf-8');
  3. if($_REQUEST['classID']){
  4.         include '../conn.php';
  5.         $class=$_REQUEST['classID'];
  6.         if(!isset($_REQUEST['itemClassID'])){
  7.                 $get_item_info="select itemID,itemName,itemPrice,itemNum,itemMark from item_$class where isDelete='0' and itemStatus ='1' order by itemOrder DESC";
  8.         }else{
  9.                 $itemClassID=intval($_REQUEST['itemClassID']);
  10.                 $get_item_info="select itemID,itemName,itemPrice,itemNum,itemMark from item_$class where itemClassID='$itemClassID' and isDelete='0' and itemStatus ='1' order by itemOrder DESC";
  11.         }
  12.         $result=$db->query($get_item_info);
  13.         if($result->num_rows>0){
  14.                 while($row=$result->fetch_assoc()){
  15.                 $item_info[]=$row;
  16.                 }
  17.         }else{
  18.                 $item_info=Array("item"=>"null");
  19.         }
  20.         echo json_encode($item_info);
  21. }
  22. ?>
复制代码
9
帖子
0
勋章
82
Y币
请问楼主,用官方api.ajax  post怎么实现与服务端交互数据,
post过去使用$_POST接受不到数据。请问有解决办法么?
29
帖子
0
勋章
193
Y币
我始终不建议直接在APP里直接暴露数据库的连接信息,很不安全,虽然APICLOUD做了JS加密,但是万一哪天XX了呢,在服务器端写接口通过权限调用是最好的方法。
2
帖子
0
勋章
80
Y币
沙发自己拿了...
9
帖子
0
勋章
53
Y币
谢谢楼主
22
帖子
0
勋章
127
Y币
似懂非懂,下载源码就懂了
4
帖子
0
勋章
1277
Y币
感谢分享
6
帖子
0
勋章
659
Y币
干货  顶
26
帖子
0
勋章
312
Y币
leejor 发表于 2015-3-2 23:40
我始终不建议直接在APP里直接暴露数据库的连接信息,很不安全,虽然APICLOUD做了JS加密,但是万一哪天XX了 ...

没有暴露在APP里吧,他是暴露在服务端的PHP代码里的
2
帖子
0
勋章
80
Y币
leejor 发表于 2015-3-2 23:40
我始终不建议直接在APP里直接暴露数据库的连接信息,很不安全,虽然APICLOUD做了JS加密,但是万一哪天XX了 ...

亲,没暴露的,ajax肯定需要接口地址url,顶多接口url被知道,但是可以加入一些自己的请求头验证或者自己加密算法生成token握手。数据库的连接信息文件是放在服务器上面的,不是放在客户端上面。
12345678910... 12下一页
您需要登录后才可以回帖 登录

本版积分规则