1. 程式人生 > >Wex5案例使用JSON傳輸Thinkphp後端對接,以達成資料正常輸出

Wex5案例使用JSON傳輸Thinkphp後端對接,以達成資料正常輸出

初步接觸Wex5,操作起來還是覺得比較複雜!而且教程不多,讓我著實比較煩躁!
因此自己動手豐衣足食!還是比較實在的!



我們使用Wex5的仿淘寶APP案例進行初步的資料對接!

開啟Wex5專案,U12/demo/taobao/main.js找到以下程式碼:

Model.prototype.goodsDataCustomRefresh = function(event) {
                /*
                 * 1、載入商品資料
                 */
                var url = require.toUrl("./main/json/goodsData.json");
                allData.loadDataFromFile(url, event.source, true);
        };

這裡呼叫的本地的固定.json輸出!而我們做的app資料怎麼可能是固定的呢?而大多數專案都是和PC&WAP連在一塊的!因此為了多端統一的資料!我們就必須統一使用一個數據庫作為儲存!而又不想寫太多程式碼!可以直接呼叫Thinkphp的JS輸出!為了和案例保持一致!那麼你需要對輸出做些變動!
我們首先在Thinkphp的專案裡新建一個API檔案!初步命名為ApitpAction.class.php作為對接APP的介面的檔案!

根據上述goodsData.json檔案,我們得到相應的資料庫欄位!為了簡單的演示!因此我們在資料庫中的goods表與此對應!當然在正式專案中你得使用自己的欄位對接!

        public function goods() {
                $result=M('goods')->where($where)->order("id desc")->select();
                output_data($result); //直接輸出陣列
        }

Model.prototype.goodsDataCustomRefresh = function(event) {
                /*
                 * 1、載入商品資料
                 */
                var url = require.toUrl("<span style="background-color: rgb(255, 255, 255);">http://127.0.0.1/Apitp/goods</span>");
                allData.loadDataFromFile(url, event.source, true);
        };

這樣我們可以看到輸出結果正常輸出中哦!其它對接以此舉一反三即可!
到了這裡最關鍵的一步到了!為什麼我要使用output_data來做為輸出JSON?下面我們要針對這個做一個特別的處理!就是跨域輸出處理!

因此我們在thinkphp專案下的common.php裡對output_data進行處理!將以下程式碼複製至common.php即可:

function output_data($datas, $extend_data = array(), $error = false) {


    $data = $datas;

    $jsonFlag = 0 && C('debug') && version_compare(PHP_VERSION, '5.4.0') >= 0
        ? JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE
        : 0;

    if ($jsonFlag) {
        header('Content-type: text/plain; charset=utf-8');
    }

    if (!empty($_GET['callback'])) {
        echo $_GET['callback'].'('.json_encode($data, $jsonFlag).')';die;
    } else {
        header("Access-Control-Allow-Origin:*");
        echo json_encode($data, $jsonFlag);die;
    }
}

好了教程到此結束!如果你不是直接輸出陣列的話,那麼你可能需要用到以下程式碼:
<span style="background-color: rgb(255, 255, 255);"><span style="color:#999999;">function output_data($datas, $extend_data = array(), $error = false) {
    $data = array();
    if(!empty($extend_data)) {
        $data = array_merge($data, $extend_data);
    }

    $data['datas'] = $datas;

    $jsonFlag = 0 && C('debug') && version_compare(PHP_VERSION, '5.4.0') >= 0
        ? JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE
        : 0;

    if ($jsonFlag) {
        header('Content-type: text/plain; charset=utf-8');
    }

    if (!empty($_GET['callback'])) {
        echo $_GET['callback'].'('.json_encode($data, $jsonFlag).')';die;
    } else {
        header("Access-Control-Allow-Origin:*");
        echo json_encode($data, $jsonFlag);die;
    }
}</span></span>
是不是很簡單呢!這樣就不需要擔心跨域問題了!!