亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 網站 > WEB開發 > 正文

變臉式應用 - 調用后端接口

2024-04-27 15:07:50
字體:
來源:轉載
供稿:網友

調用后端接口是筋斗云框架提供的兩大核心功能之一。

[任務]

繼續hello頁面的例子,要求每次進入頁面時,不是固定的顯示”hello, world”,而是需要根據服務端的返回內容來顯示hello的內容,比如”hello, skys”或是”hello, jdcloud”。

我們先定義一個叫做”hello”的交互接口,由前端發起一個HTTP GET請求,比如:

http://myserver/myPRoject/api.php?ac=hello

如果調用成功,后端返回JSON格式的數據如下:

[0, "jdcloud"]

其中0是返回碼,表示調用成功。如果調用失敗,可返回:

[99, "對不起,服務器爆炸了"]

以上就是一個符合筋斗云接口規范的簡單例子(稱為業務查詢協議-BQP),在成功調用時應返回[0, data],在調用失敗時應返回[非0, 錯誤提示信息]。

有了清晰的接口定義,前后端就可以并行開發了。 在前端,我們把頁面稍作修改以動態顯示hello的內容:

<div class="bd"> <p>Hello, <span id="what"></span></p> </div>

再寫一段邏輯,每當進入頁面時調用hello接口并顯示內容,我們選擇onBeforeShow回調來做這件事:

function initPageHello() { var jpage = $(this); jpage.on("pagebeforeshow", onBeforeShow); function onBeforeShow() { callSvr("hello", api_hello); } function api_hello(data) { jpage.find("#what").html(data); }}

callSvr是框架提供的一個重要函數,它封裝了Ajax調用的細節,完整的函數原型為:

callSvr(ac, param?, fn?, postParam?, options?);

其中,ac是調用接口名,fn是回調函數,param和postParam分別是URL參數和POST參數。除ac外,其它參數均可省略。例如

callSvr("hello");callSvr("hello", {id: 1}); // URL: hello?id=1callSvr("hello", {id: 1}, api_hello); // function api_hello(data) {}callSvr("hello", api_hello, {name: "hello"});

回調函數api_hello僅在成功時被調用,參數data是實際數據,即[0, data]中的data部分,不包括返回碼0。 當調用失敗時,框架會統一處理,顯示錯誤信息,無須操心。

調用模擬接口

上面代碼寫好了,后端接口還沒做好怎么測試?

筋斗云支持模擬接口返回數據。 在mockdata.js中,可以設置接口的模擬返回數據:

MUI.mockData = { ... "hello": [0, "jdcloud"]}

此處還可以用函數做更復雜的基于參數的模擬,詳見API文檔,查詢MUI.mockData

運行H5應用,進入hello頁面,看看是不是可以正常顯示了?

可以動態修改模擬數據,在控制臺中輸入:

MUI.mockData["hello"] = [0, "skys"]

然后從hello頁返回首頁,再進入hello頁,看看顯示內容是不是變了?

再改一個出錯的試試:

MUI.mockData["hello"] = [99, "對不起,服務器爆炸了"]

進入hello頁,我們看到,調用失敗時,回調函數api_hello沒有執行,而是框架自動接管過去,顯示出錯信息。

調用真實接口

在后端接口開發好后,我們可去掉對這個接口的模擬,直接遠程調用服務端接口。這需要配置好后端接口的地址。

我們用php寫一個簡單的符合筋斗云接口規范的后端實現,通過名為”ac”的URL參數表示接口名,在server目錄中創建文件api.php如下:

<?php@$ac = $_GET['ac'];if ($ac == 'hello') { $what = "jdcloud @ " . time(); echo json_encode([0, $what]);}else { echo json_encode([1, "bad ac"]);}

配置好php的調用環境后,訪問

http://localhost/myproject/api.php?ac=hello

輸出類似這樣(根據時間動態變化):

[0,"jdcloud @ 1483526151"]

回到前端,我們在app.js中設置服務端接口地址:

$.extend(MUI.options, { serverUrl: "api.php", serverUrlAc: "ac" });

serverUrl選項設置了服務端的URL地址,因為我們將”api.php”放在與”index.html”同一目錄下,所以直接用相對路徑就可以了。serverUrlAc選項定義了接口名對應的URL參數名稱,即?ac={接口名}. 在mockdata.js中去掉對”hello”接口的模擬,刷新應用就可以看到調用后端的效果了。

如果前后端不在同一臺服務器上,則要將URL寫完整,如

serverUrl: "http://myserver/myproject/api.php";

注意:后端應設置好允許跨域請求。這里不做詳述。

以上講述的是符合筋斗云接口規范的接口調用設置,如果不符合該規范,請閱讀下一節“接口適配”。

接口適配

在上例中,假定了后端接口兼容筋斗云接口規范,例如返回格式為[0, jsonData][非0, 錯誤信息]。 如果接口協議不兼容,則需要做接口適配。

接口適配的目標是通過callSvr函數更加簡練地調用后臺接口,同時達到:

調用出錯統一處理,例如未認證錯跳轉到登錄頁,其它錯誤彈出錯誤提示框等。寫代碼時只需要處理調用成功后返回的數據,不用每次調用都處理各種錯誤。

[任務]

適配以下接口協議規范,約定接口返回格式為:{code, msg, data}, 例如上例中的hello接口,調用成功時返回:

{ "code":"0", "msg":"success", "data":"jdcloud"}

失敗返回:

{ "code":"99", "msg":"對不起,服務器爆炸了"}

這時需要對callSvr進行適配,可以在app.js中,設置 MUI.callSvrExt如下:

MUI.callSvrExt['default'] = { makeUrl: function(ac) { return 'http://hostname/lcapi/' + ac; }, dataFilter: function (data) { if ($.isPlainObject(data) && data.code !== undefined) { if (data.code == 0) return data.data; if (this.noex) return false; app_alert("操作失敗:" + data.msg, "e"); } else { app_alert("服務器通訊協議異常!", "e"); // 格式不對 } } };

我們在mockdata.js中設置好模擬數據用于測試:

MUI.mockData = { "User.get": {code: 0, msg: "success", data: user}, "hello": {code: 0, msg: "success", data:"myworld"} ...}

上例中,User.get接口在顯示首頁是會調用,所以和”hello”接口一并模擬下。

測試接口調用:

callSvr("hello", console.log);或callSvrSync("hello");

callSvrSynccallSvr的同步調用版本,它直接等到調用完成才返回,且返回值就是調用成功返回的數據。

可以動態修改模擬數據:

MUI.mockData["hello"] = {code: 99, msg: "對不起,服務器爆炸了"}

在接口適配完成后,應用層代碼不用去做任何修改。 進入頁面看看,是不是和上節的運行結果是一樣的。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品视频久久| 成人在线小视频| 久久精品美女视频网站| 国产精品一区二区在线| 中文字幕日韩有码| 日韩精品视频在线观看网址| 日韩精品免费一线在线观看| 精品精品国产国产自在线| 97在线视频免费看| 久久手机精品视频| 日韩成人av在线| 九色精品美女在线| 国产日韩欧美在线视频观看| 高清欧美性猛交xxxx| www亚洲精品| 性欧美在线看片a免费观看| 久久99青青精品免费观看| 国产91ⅴ在线精品免费观看| 91精品视频在线免费观看| 亚洲欧美自拍一区| 国产精品爱啪在线线免费观看| 国产精品日本精品| 久久久女女女女999久久| 亚洲精品成人久久久| 亚洲免费高清视频| 国产一区二区三区久久精品| 欧美成人性色生活仑片| 国产精品视频在线观看| 久久91亚洲人成电影网站| 91精品一区二区| 在线播放精品一区二区三区| 中文欧美日本在线资源| 高清亚洲成在人网站天堂| 久久精品国产精品| 欧美影院久久久| 亚洲欧美国产精品久久久久久久| 国产视频自拍一区| 欧美日韩国产精品一区二区不卡中文| 美女撒尿一区二区三区| 精品一区二区三区三区| 亚洲欧美国产另类| 欧美日韩在线视频首页| 日韩激情视频在线| 亚洲最大的av网站| 日韩精品一区二区三区第95| 成人在线视频福利| 精品福利一区二区| 国产日韩欧美中文在线播放| 国自产精品手机在线观看视频| 久久影院资源站| 成人激情综合网| 久久久久久18| 欧美成人免费全部观看天天性色| 亚洲一区美女视频在线观看免费| 亚洲第一区第一页| 日韩av有码在线| 一区二区三区在线播放欧美| 欧美俄罗斯性视频| 中文字幕精品久久久久| 精品国产电影一区| 国产精品一区二区久久精品| 欧美大片va欧美在线播放| 亚洲人免费视频| 国产成人精品视频在线| 亚洲第一网站男人都懂| 欧美国产日韩免费| 91亚洲一区精品| 欧美大奶子在线| 日韩av电影国产| 日韩av手机在线观看| 久久久亚洲欧洲日产国码aⅴ| 日韩经典中文字幕在线观看| 久久久亚洲网站| 中文字幕亚洲国产| 亚洲精品二三区| 久久国产精品影片| 国产精品久久久久久久av大片| 中文字幕欧美国内| 日本久久久久久久久| 欧美性猛交xxxx黑人| 国产精品久久久久久久午夜| 日韩av一区在线观看| 欧美日韩亚洲一区二区| 欧美成人免费在线观看| 国产亚洲精品久久久久久777| 日韩精品在线观| 日韩成人高清在线| 亚洲第一区第一页| 欧美精品在线第一页| 亚洲精品福利视频| 日韩中文在线不卡| 91色在线视频| 国产最新精品视频| 精品久久久久久久大神国产| 久久在线精品视频| 国产精品美女无圣光视频| 国产精品91在线| 日韩一级黄色av| 亚州国产精品久久久| 国产精品日韩欧美| 国产日韩欧美成人| 久操成人在线视频| 国产精品视频网站| 91精品国产99久久久久久| 久久久久中文字幕| 欧美极品美女电影一区| 色婷婷久久av| www.日韩欧美| 免费97视频在线精品国自产拍| 亚洲最大成人免费视频| 色综合天天狠天天透天天伊人| 国内精品国产三级国产在线专| 欧美中文在线观看国产| 欧美黑人一级爽快片淫片高清| 欧美激情视频在线免费观看 欧美视频免费一| 亚洲大胆美女视频| 91精品国产91久久久久久最新| 91社区国产高清| 日本免费一区二区三区视频观看| 亚洲一级一级97网| 性色av一区二区三区红粉影视| 九九热视频这里只有精品| 91香蕉嫩草神马影院在线观看| 欧美色道久久88综合亚洲精品| 自拍偷拍亚洲精品| 精品亚洲国产视频| 欧美大片免费观看| 国产91久久婷婷一区二区| 色一情一乱一区二区| 日韩久久精品成人| 国产精品999| 国产成人综合精品在线| 午夜精品一区二区三区在线视频| 日韩h在线观看| 日韩精品视频在线免费观看| 91国内揄拍国内精品对白| 国产精品狼人色视频一区| 在线视频精品一| 成人久久久久久久| 欧美激情中文字幕乱码免费| 国产精品免费久久久| 九九久久国产精品| 国产精品久久久久99| 欧美精品在线网站| 亚洲一二三在线| 日韩成人av网址| 精品无码久久久久久国产| 亚洲娇小xxxx欧美娇小| 国产第一区电影| 国产精品综合不卡av| 日本国产精品视频| 97香蕉超级碰碰久久免费的优势| 久久亚洲国产精品| 久久伊人精品视频| 91av国产在线| 久久久久北条麻妃免费看| 夜夜嗨av色综合久久久综合网| 欧美日韩国产在线播放| 亚洲欧美日韩第一区| 国产成人精彩在线视频九色| 日韩av一卡二卡| 国产精品一区二区三区久久| 欧美wwwwww| 亚洲欧美国产va在线影院|