apicloud apicloud

注册
查看: 54151|回复: 108

[APP开发技巧] 使用【端API】连接到自己的服务器数据库获取数据 - api.ajax

 

主题:
2
帖子:
23
云币:
80

[APP开发技巧] 使用【端API】连接到自己的服务器数据库获取数据 - api.ajax

 
54151 108 | 发表于 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密码。

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

附件打包:

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

1

查看全部评分

主题:
2
帖子:
23
云币:
80
 楼主| 发表于 2015-3-3 23:28:00 |
君君芶 发表于 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
帖子:
30
云币:
82

端午节

发表于 2015-3-3 18:10:45 |
请问楼主,用官方api.ajax  post怎么实现与服务端交互数据,
post过去使用$_POST接受不到数据。请问有解决办法么?

实习司机

UID:20960

主题:
29
帖子:
121
云币:
191
发表于 2015-3-2 23:40:47 |
我始终不建议直接在APP里直接暴露数据库的连接信息,很不安全,虽然APICLOUD做了JS加密,但是万一哪天XX了呢,在服务器端写接口通过权限调用是最好的方法。

主题:
2
帖子:
23
云币:
80
 楼主| 发表于 2015-3-1 16:29:21 |
沙发自己拿了...

新手上路

UID:40149

主题:
9
帖子:
23
云币:
43
发表于 2015-3-1 20:58:58 |
谢谢楼主

新手上路

UID:16461

主题:
22
帖子:
88
云币:
123
发表于 2015-3-1 22:03:26 |
似懂非懂,下载源码就懂了

主题:
4
帖子:
676
云币:
1223
发表于 2015-3-2 11:18:02 |
感谢分享

新手上路

UID:27072

主题:
6
帖子:
85
云币:
659

连续签到100天

发表于 2015-3-3 09:29:14 |
干货  顶

新手上路

UID:20673

主题:
26
帖子:
86
云币:
310
发表于 2015-3-3 10:05:57 |
leejor 发表于 2015-3-2 23:40
我始终不建议直接在APP里直接暴露数据库的连接信息,很不安全,虽然APICLOUD做了JS加密,但是万一哪天XX了 ...

没有暴露在APP里吧,他是暴露在服务端的PHP代码里的

主题:
2
帖子:
23
云币:
80
 楼主| 发表于 2015-3-3 14:36:05 |
leejor 发表于 2015-3-2 23:40
我始终不建议直接在APP里直接暴露数据库的连接信息,很不安全,虽然APICLOUD做了JS加密,但是万一哪天XX了 ...

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

快速回复 返回顶部 返回列表