• Wex5案例使用JSON传输Thinkphp后端对接,以达成数据正常输出


    初步接触Wex5,操作起来还是觉得比较复杂!而且教程不多,让我着实比较烦躁! 因此自己动手丰衣足食!还是比较实在的!

    采用版本:WeX5应用快速开发框架V3.5正式版

    我们使用Wex5的仿淘宝APP案例进行初步的数据对接! 打开Wex5项目,U12/demo/taobao/main.js找到以下代码:

    复制代码
    01.Model.prototype.goodsDataCustomRefresh = function(event) {
    
    02. /*
    
    03. * 1、加载商品数据
    
    04. */
    
    05. var url = require.toUrl("./main/json/goodsData.json");
    
    06. allData.loadDataFromFile(url, event.source, true);
    
    07. };
    复制代码

    复制代码这里调用的本地的固定.json输出!而我们做的app数据怎么可能是固定的呢?而大多数项目都是和PC&WAP连在一块的!因此为了多端统一的数据!我们就必须统一使用一个数据库作为存储!而又不想写太多代码!可以直接调用Thinkphp的JS输出!为了和案例保持一致!那么你需要对输出做些变动!

    我们首先在Thinkphp的项目里新建一个API文件!初步命名为ApitpAction.class.php作为对接APP的接口的文件! 根据上述goodsData.json文件,我们得到相应的数据库字段!为了简单的演示!因此我们在数据库中的goods表与此对应!当然在正式项目中你得使用自己的字段对接!

    复制代码
    01. public function goods() {
    
    02. $result=M('goods')->where($where)->order("id desc")->select();
    
    03. output_data($result); //直接输出数组
    
    04. }
    复制代码

    复制代码那么我们的这个接口文件就是http://127.0.0.1/Apitp/goods;然后把以下代码替换第一步的JS中!

    复制代码
    01.Model.prototype.goodsDataCustomRefresh = function(event) {
    
    02. /*
    
    03. * 1、加载商品数据
    
    04. */
    
    05. var url = require.toUrl("<span style="">http://127.0.0.1/Apitp/goods</span>");
    
    06. allData.loadDataFromFile(url, event.source, true);
    
    07. };
    复制代码

    复制代码这样我们可以看到输出结果正常输出中哦!其它对接以此举一反三即可!

    到了这里最关键的一步到了!为什么我要使用output_data来做为输出JSON?下面我们要针对这个做一个特别的处理!就是跨域输出处理! 因此我们在thinkphp项目下的common.php里对output_data进行处理!将以下代码复制至common.php即可:

    复制代码
    01.function output_data($datas, $extend_data = array(), $error = false) {
    
    02.
    
    03.
    
    04. $data = $datas;
    
    05.
    
    06. $jsonFlag = 0 && C('debug') && version_compare(PHP_VERSION, '5.4.0') >= 0
    
    07. ? JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE
    
    08. : 0;
    
    09.
    
    10. if ($jsonFlag) {
    
    11. header('Content-type: text/plain; charset=utf-8');
    
    12. }
    
    13.
    
    14. if (!empty($_GET['callback'])) {
    
    15. echo $_GET['callback'].'('.json_encode($data, $jsonFlag).')';die;
    
    16. } else {
    
    17. header("Access-Control-Allow-Origin:*");
    
    18. echo json_encode($data, $jsonFlag);die;
    
    19. }
    
    20.}
    复制代码

    好了教程到此结束!如果你不是直接输出数组的话,那么你可能需要用到以下代码:

    复制代码
    01.function output_data($datas, $extend_data = array(), $error = false) {
    
    02. $data = array();
    
    03. if(!empty($extend_data)) {
    
    04. $data = array_merge($data, $extend_data);
    
    05. }
    
    06.
    
    07. $data['datas'] = $datas;
    
    08.
    
    09. $jsonFlag = 0 && C('debug') && version_compare(PHP_VERSION, '5.4.0') >= 0
    
    10. ? JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE
    
    11. : 0;
    
    12.
    
    13. if ($jsonFlag) {
    
    14. header('Content-type: text/plain; charset=utf-8');
    
    15. }
    
    16.
    
    17. if (!empty($_GET['callback'])) {
    
    18. echo $_GET['callback'].'('.json_encode($data, $jsonFlag).')';die;
    
    19. } else {
    
    20. header("Access-Control-Allow-Origin:*");
    
    21. echo json_encode($data, $jsonFlag);die;
    
    22. }
    
    23.}
    复制代码

    是不是很简单呢!这样就不需要担心跨域问题了!!

    http://www.cnblogs.com/luoxiaomo/p/5780613.html

  • 相关阅读:
    单例类
    UITableView汇总
    JVM虚拟机——垃圾收集算法
    集合框架 HashMap 的扩容机制, ConcurrnetHashMap 的原理
    java判断两个单链表是否相交
    java中Comparator 和 Comparable的区别
    String getProperty(String key, String def)
    JAVA 单步调试快捷键
    Stanford Word Segmenter使用
    使用ifstream和getline读取文件内容[c++]
  • 原文地址:https://www.cnblogs.com/chen110xi/p/5887263.html
Copyright © 2020-2023  润新知