一.什么是json
創(chuàng)新互聯(lián)公司成立與2013年,先為靈武等服務(wù)建站,靈武等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為靈武企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。
json是一種取代xml的數(shù)據(jù)結(jié)構(gòu),和xml相比,它更小巧但描述能力卻很強(qiáng),網(wǎng)絡(luò)傳輸數(shù)據(jù)使用流量更少,速度更快。
json就是一串字符串,使用下面的符號(hào)標(biāo)注。
{鍵值對(duì)} : json對(duì)象
[{},{},{}] :json數(shù)組
"" :雙引號(hào)內(nèi)是屬性或值
: :冒號(hào)前為鍵,后為值(這個(gè)值可以是基本數(shù)據(jù)類(lèi)型的值,也可以是數(shù)組或?qū)ο螅?,所?{"age": 18} 可以理解為是一個(gè)包含age為18的json對(duì)象,而[{"age": 18},{"age": 20}]就表示包含兩個(gè)對(duì)象的json數(shù)組。也可以使用{"age":[18,20]}來(lái)簡(jiǎn)化上面的json數(shù)組,這是一個(gè)擁有一個(gè)age數(shù)組的對(duì)象。
二.$.ajax()方法中dataType屬性的取值
$.ajax()方法中dataType屬性要求為String類(lèi)型的參數(shù),預(yù)期服務(wù)器返回的數(shù)據(jù)類(lèi)型。如果不指定,JQuery將自動(dòng)根據(jù)http包mime信息返回responseXML或responseText【在第三部分解釋】,并作為回調(diào)函數(shù)參數(shù)傳遞??捎玫念?lèi)型如下:
xml:返回XML文檔,可用JQuery處理。
html:返回純文本HTML信息;包含的script標(biāo)簽會(huì)在插入DOM時(shí)執(zhí)行。
script:返回純文本JavaScript代碼。不會(huì)自動(dòng)緩存結(jié)果。除非設(shè)置了cache參數(shù)。注意在遠(yuǎn)程請(qǐng)求時(shí)(不在同一個(gè)域下),所有post請(qǐng)求都將轉(zhuǎn)為get請(qǐng)求。
json:返回JSON數(shù)據(jù)。
jsonp:JSONP格式。使用SONP形式調(diào)用函數(shù)時(shí),例如myurl?callback=?,JQuery將自動(dòng)替換后一個(gè)“?”為正確的函數(shù)名,以執(zhí)行回調(diào)函數(shù)。
三.Mime數(shù)據(jù)類(lèi)型及response的setContentType()方法
什么是MIME類(lèi)型?在把輸出結(jié)果傳送到瀏覽器上的時(shí)候,瀏覽器必須啟動(dòng)適當(dāng)?shù)膽?yīng)用程序來(lái)處理這個(gè)輸出文檔。這可以通過(guò)多種類(lèi)型MIME(多功能網(wǎng)際郵件擴(kuò)充協(xié)議)來(lái)完成。在HTTP中,MIME類(lèi)型被定義在Content-Type header中。
例 如,架設(shè)你要傳送一個(gè)Microsoft Excel文件到客戶端。那么這時(shí)的MIME類(lèi)型就是“application/vnd.ms-excel”。在大多數(shù)實(shí)際情況中,這個(gè)文件然后將傳送給 Execl來(lái)處理(假設(shè)我們?cè)O(shè)定Execl為處理特殊MIME類(lèi)型的應(yīng)用程序)。在Java中,設(shè)定MIME類(lèi)型的方法是通過(guò)Response對(duì)象的ContentType屬性。比如常用:response.setContentType("text/html;charset=UTF-8")進(jìn)行設(shè)置。
最早的HTTP協(xié)議中,并沒(méi)有附加的數(shù)據(jù)類(lèi)型信息,所有傳送的數(shù)據(jù)都被客戶程序解釋為超文本標(biāo)記語(yǔ)言HTML 文檔,而為了支持多媒體數(shù)據(jù)類(lèi)型,HTTP協(xié)議中就使用了附加在文檔之前的MIME數(shù)據(jù)類(lèi)型信息來(lái)標(biāo)識(shí)數(shù)據(jù)類(lèi)型。
每個(gè)MIME類(lèi)型由兩部分組成,前面是數(shù)據(jù)的大類(lèi)別,例如文本text、圖象image等,后面定義具體的種類(lèi)。
常見(jiàn)的MIME類(lèi)型:
超文本標(biāo)記語(yǔ)言文本 .html,.html text/html
普通文本 .txt text/plain
RTF文本 .rtf application/rtf
GIF圖形 .gif image/gif
JPEG圖形 .ipeg,.jpg image/jpeg
au聲音文件 .au audio/basic
MIDI音樂(lè)文件 mid,.midi audio/midi,audio/x-midi
RealAudio音樂(lè)文件 .ra, .ram audio/x-pn-realaudio
MPEG文件 .mpg,.mpeg video/mpeg
AVI文件 .avi video/x-msvideo
GZIP文件 .gz application/x-gzip
TAR文件 .tar application/x-tar
客戶程序從服務(wù)器上接收數(shù)據(jù)的時(shí)候,它只是從服務(wù)器接受數(shù)據(jù)流,并不了解文檔的名字,因此服務(wù)器必須使用附加信息來(lái)告訴客戶程序數(shù)據(jù)的MIME類(lèi)型。
服務(wù)器在發(fā)送真正的數(shù)據(jù)之前,就要先發(fā)送標(biāo)志數(shù)據(jù)的MIME類(lèi)型的信息,這個(gè)信息使用Content-type關(guān)鍵字進(jìn)行定義,例如對(duì)于HTML文檔,服務(wù)器將首先發(fā)送以下兩行MIME標(biāo)識(shí)信息,這個(gè)標(biāo)識(shí)并不是真正的數(shù)據(jù)文件的一部分。
Content-type: text/html
注意,第二行為一個(gè)空行,這是必須的,使用這個(gè)空行的目的是將MIME信息與真正的數(shù)據(jù)內(nèi)容分隔開(kāi)。
如前面所說(shuō),在Java中,設(shè)定MIME類(lèi)型的方法是通過(guò)Response對(duì)象的ContentType屬性,設(shè)置的方法是使用response.setContentType(MIME)語(yǔ)句,response.setContentType(MIME)的作用是使客戶端瀏覽器,區(qū)分不同種類(lèi)的數(shù)據(jù),并根據(jù)不同的MIME調(diào)用瀏覽器內(nèi)不同的程序嵌入模塊來(lái)處理相應(yīng)的數(shù)據(jù)。
Tomcat的安裝目錄\conf\web.xml中就定義了大量MIME類(lèi)型 ,可以參考。比如可以設(shè)置:
response.setContentType("text/html; charset=utf-8"); html
response.setContentType("text/plain; charset=utf-8"); 文本
application/json json數(shù)據(jù)
這個(gè)方法設(shè)置發(fā)送到客戶端的響應(yīng)的內(nèi)容類(lèi)型,此時(shí)響應(yīng)還沒(méi)有提交。給出的內(nèi)容類(lèi)型可以包括字符編碼說(shuō)明,例如:text/html;charset=UTF-8。如果該方法在getWriter()方法被調(diào)用之前調(diào)用,那么響應(yīng)的字符編碼將僅從給出的內(nèi)容類(lèi)型中設(shè)置。該方法如果在getWriter()方法被調(diào)用之后或者在被提交之后調(diào)用,將不會(huì)設(shè)置響應(yīng)的字符編碼,在使用http協(xié)議的情況中,該方法設(shè)置 Content-type實(shí)體報(bào)頭。
四.使用$.ajax()方法獲取json數(shù)據(jù)的三種方式
dataType參數(shù)的配置決定了jquery如何幫助我們自動(dòng)解析服務(wù)器返回的數(shù)據(jù),有幾種方式可以獲取后臺(tái)返回的json字符串并解析為json對(duì)象,下面是Java為例解釋,下面三中方式的結(jié)果都是圖一所示,項(xiàng)目運(yùn)行在內(nèi)網(wǎng),無(wú)法截圖,只能拍照,見(jiàn)諒。
1、$.ajax()參數(shù)中不設(shè)置dataType,后臺(tái)response也不設(shè)置返回類(lèi)型,則默認(rèn)會(huì)以普通文本處理【response.setContentType("text/html;charset=utf-8");也是作為文本處理】,js中需要手動(dòng)使用eval()或$.parseJSON()等方法將返回的字符串轉(zhuǎn)換為json對(duì)象使用。
//Java代碼:后臺(tái)獲取單個(gè)數(shù)控定位器的歷史表格的數(shù)據(jù) public void getHistorySingleData() throws IOException{ HttpServletRequest request = ServletActionContext.getRequest(); HttpServletResponse response = ServletActionContext.getResponse(); response.setHeader("Content-type", "text/html;charset=UTF-8"); response.setContentType("text/html;charset=utf-8"); String deviceName = request.getParameter("deviceName"); String startDate= request.getParameter("startDate"); String endDate = request.getParameter("endDate"); SingleHistoryData[] singleHistoryData = chartService.getHistorySingleData(deviceName,startDate, endDate); System.out.println(singleHistoryData.length); System.out.println(JSONArray.fromObject(singleHistoryData).toString());//打印:[{"time":"2016-11-11 10:00:00","state":"運(yùn)行","ball":"鎖緊",....},{"time":"2016-11-11 10:00:05","state":"運(yùn)行","ball":"鎖緊",....},{},{}....]查到幾條singleHistoryData對(duì)象就打印幾個(gè)對(duì)象的信息{"time":"2016-11-11 10:00:05","state":"運(yùn)行","ball":"鎖緊",....} response.getWriter().print(JSONArray.fromObject(singleHistoryData).toString()); }
/*js代碼:選擇查詢某一時(shí)間段的數(shù)據(jù),點(diǎn)擊查詢之后進(jìn)行顯示*/ $("#search").click(function () { var data1 = []; var n; var deviceName=$("body").attr("id"); var startDate = $("#startDate").val(); var endDate = $("#endDate").val(); $.ajax({ url:"/avvii/chart/getHistorySingleData", type:"post", data:{ "deviceName":deviceName, "startDate": startDate, "endDate": endDate }, success: function (data) { alert(data);//---->彈出[{"time":"2016-11-11 10:00:00","state":"運(yùn)行","ball":"鎖緊",....},{"time":"2016-11-11 10:00:05","state":"運(yùn)行","ball":"鎖緊",....},{},{}....],后臺(tái)傳過(guò)來(lái)幾條singleHistoryData對(duì)象就打印幾個(gè)對(duì)象的信息{"time":"2016-11-11 10:00:05","state":"運(yùn)行","ball":"鎖緊",....} alert(Object.prototype.toString.call(data)); //--->彈出[object String],說(shuō)明獲取的是String類(lèi)型的數(shù)據(jù) var JsonObjs = eval("(" + data + ")"); //或者:var JsonObjs = $.parseJSON(data); alert(JsonObjs);//alert(JsonObjs);---->彈出[object Object],[object Object],[object Object][object Object],[object Object],[object Object]……后臺(tái)傳過(guò)來(lái)幾條singleHistoryData對(duì)象就打印幾個(gè)[object Object] n=JsonObjs.length; if(n==0){ alert("您選擇的時(shí)間段無(wú)數(shù)據(jù),請(qǐng)重新查詢"); } for(var i = 0; i < JsonObjs.length; i++){ var name = JsonObjs[i]['time'];//針對(duì)每一條數(shù)據(jù):JsonObjs[i],或者:JsonObjs[i].time var state = JsonObjs[i]['state']; var ball = JsonObjs[i]['ball']; var xd = JsonObjs[i]['xd']; var yd = JsonObjs[i]['yd']; var zd = JsonObjs[i]['zd']; var xf = JsonObjs[i]['xf']; var yf = JsonObjs[i]['yf']; var zf = JsonObjs[i]['zf']; data1[i] = {name:name,state:state,ball:ball,xd:xd,yd:yd,zd:zd,xf:xf,yf:yf,zf:zf};//個(gè)數(shù)與下面表頭對(duì)應(yīng)起來(lái)就可以了,至于叫什么名字并不影響控件的使用 } if(JsonObjs.length != 10){ for(var j=0;j<(10-((JsonObjs.length)%10));j++){ //補(bǔ)全最后一頁(yè)的空白行,使表格的長(zhǎng)度保持不變 data1[j+JsonObjs.length] = {name:" ",state:"",ball:"",xd:"",yd:"",zd:"",xf:"",yf:"",zf:""}; } } var userOptions = { "id":"kingTable", //必須 表格id "head":["時(shí)間","運(yùn)行狀態(tài)","球頭狀態(tài)","X向位置/mm","Y向位置/mm","Z向位置/mm","X向承載力/Kg","Y向承載力/Kg","Z向承載力/Kg"], //必須 thead表頭 "body":data1, //必須 tbody 后臺(tái)返回的數(shù)據(jù)展示 "foot":true, // true/false 是否顯示tfoot --- 默認(rèn)false "displayNum": 10, //必須 默認(rèn) 10 每頁(yè)顯示行數(shù) "groupDataNum":6, //可選 默認(rèn) 10 組數(shù) sort:false, // 點(diǎn)擊表頭是否排序 true/false --- 默認(rèn)false search:false, // 默認(rèn)為false 沒(méi)有搜索 lang:{ gopageButtonSearchText:"搜索" } } var cs = new KingTable(null,userOptions); } }); });
2、$.ajax()參數(shù)中設(shè)置dataType="json",則jquery會(huì)自動(dòng)將返回的字符串轉(zhuǎn)化為json對(duì)象。后臺(tái)可以設(shè)置為:【推薦】response.setContentType("text/html;charset=utf-8");或者response.setContentType("application/json;charset=utf-8");
//Java代碼:后臺(tái)獲取單個(gè)數(shù)控定位器的歷史表格的數(shù)據(jù) public void getHistorySingleData() throws IOException{ HttpServletRequest request = ServletActionContext.getRequest(); HttpServletResponse response = ServletActionContext.getResponse(); response.setHeader("Content-type", "text/html;charset=UTF-8"); response.setContentType("text/html;charset=utf-8"); String deviceName = request.getParameter("deviceName"); String startDate= request.getParameter("startDate"); String endDate = request.getParameter("endDate"); SingleHistoryData[] singleHistoryData = chartService.getHistorySingleData(deviceName,startDate, endDate); System.out.println(singleHistoryData.length); System.out.println(JSONArray.fromObject(singleHistoryData).toString());//打?。篬{"time":"2016-11-11 10:00:00","state":"運(yùn)行","ball":"鎖緊",....},{"time":"2016-11-11 10:00:05","state":"運(yùn)行","ball":"鎖緊",....},{},{}....]查到幾條singleHistoryData對(duì)象就打印幾個(gè)對(duì)象的信息{"time":"2016-11-11 10:00:05","state":"運(yùn)行","ball":"鎖緊",....} response.getWriter().print(JSONArray.fromObject(singleHistoryData).toString()); }
/*js代碼:頁(yè)面首次加載時(shí),顯示規(guī)定時(shí)間段的數(shù)據(jù)*/ var data1 = []; var deviceName=$("body").attr("id"); var startDate = $("#startDate").val("2000-01-01 00:00:00"); var endDate = $("#endDate").val("2018-01-01 00:00:00"); $.ajax({ url:"/avvii/chart/getHistorySingleData", type:"post", data:{ "deviceName":deviceName, "startDate": "2000-01-01 00:00:00", "endDate": "2018-01-01 00:00:00" }, dataType:"json", success: function (data) { alert(data);//---->彈出[object Object],[object Object],[object Object][object Object],[object Object],[object Object]……后臺(tái)傳過(guò)來(lái)幾條singleHistoryData對(duì)象就打印幾個(gè)json對(duì)象:[object Object] for(var i = 0; i < data.length; i++){ var name = data[i]['time']; var state = data[i]['state']; var ball = data[i]['ball']; var xd = data[i]['xd']; var yd = data[i]['yd']; var zd = data[i]['zd']; var xf = data[i]['xf']; var yf = data[i]['yf']; var zf = data[i]['zf']; data1[i] = {name:name,state:state,ball:ball,xd:xd,yd:yd,zd:zd,xf:xf,yf:yf,zf:zf}; } if(data.length != 10){ for(var j=0;j<(10-((data.length)%10));j++){ //補(bǔ)全最后一頁(yè)的空白行,使表格的長(zhǎng)度保持不變 data1[j+data.length] = {name:" ",state:"",ball:"",xd:"",yd:"",zd:"",xf:"",yf:"",zf:""}; } } var userOptions = { "id":"kingTable", //必須 表格id "head":["時(shí)間","運(yùn)行狀態(tài)","球頭狀態(tài)","X向位置/mm","Y向位置/mm","Z向位置/mm","X向承載力/Kg","Y向承載力/Kg","Z向承載力/Kg"], //必須 thead表頭 "body":data1, //必須 tbody 后臺(tái)返回的數(shù)據(jù)展示 "foot":true, // true/false 是否顯示tfoot --- 默認(rèn)false "displayNum": 10, //必須 默認(rèn) 10 每頁(yè)顯示行數(shù) "groupDataNum":6, //可選 默認(rèn) 10 組數(shù) sort:false, // 點(diǎn)擊表頭是否排序 true/false --- 默認(rèn)false search:false, // 默認(rèn)為false 沒(méi)有搜索 lang:{ gopageButtonSearchText:"搜索" } } var cs = new KingTable(null,userOptions); } });
3、ajax方法參數(shù)中不指定dataType,后臺(tái)設(shè)置返回類(lèi)型為"application/json"。這樣jquery就會(huì)根據(jù)mime類(lèi)型來(lái)智能判斷,并自動(dòng)解析成json對(duì)象。
//Java代碼:后臺(tái)獲取單個(gè)數(shù)控定位器的歷史表格的數(shù)據(jù) public void getHistorySingleData() throws IOException{ HttpServletRequest request = ServletActionContext.getRequest(); HttpServletResponse response = ServletActionContext.getResponse(); response.setHeader("Content-type", "text/html;charset=UTF-8"); response.setContentType("application/json;charset=utf-8"); String deviceName = request.getParameter("deviceName"); String startDate= request.getParameter("startDate"); String endDate = request.getParameter("endDate"); SingleHistoryData[] singleHistoryData = chartService.getHistorySingleData(deviceName,startDate, endDate); System.out.println(singleHistoryData.length); System.out.println(JSONArray.fromObject(singleHistoryData).toString());//打?。篬{"time":"2016-11-11 10:00:00","state":"運(yùn)行","ball":"鎖緊",....},{"time":"2016-11-11 10:00:05","state":"運(yùn)行","ball":"鎖緊",....},{},{}....]查到幾條singleHistoryData對(duì)象就打印幾個(gè)對(duì)象的信息{"time":"2016-11-11 10:00:05","state":"運(yùn)行","ball":"鎖緊",....} response.getWriter().print(JSONArray.fromObject(singleHistoryData).toString()); }
/*js代碼:頁(yè)面首次加載時(shí),顯示規(guī)定時(shí)間段的數(shù)據(jù)*/ var data1 = []; var deviceName=$("body").attr("id"); var startDate = $("#startDate").val("2000-01-01 00:00:00"); var endDate = $("#endDate").val("2018-01-01 00:00:00"); $.ajax({ url:"/avvii/chart/getHistorySingleData", type:"post", data:{ "deviceName":deviceName, "startDate": "2000-01-01 00:00:00", "endDate": "2018-01-01 00:00:00" }, success: function (data) { alert(data);//---->彈出[object Object],[object Object],[object Object][object Object],[object Object],[object Object]……后臺(tái)傳過(guò)來(lái)幾條singleHistoryData對(duì)象就打印幾個(gè)json對(duì)象:[object Object] for(var i = 0; i < data.length; i++){ var name = data[i]['time']; var state = data[i]['state']; var ball = data[i]['ball']; var xd = data[i]['xd']; var yd = data[i]['yd']; var zd = data[i]['zd']; var xf = data[i]['xf']; var yf = data[i]['yf']; var zf = data[i]['zf']; data1[i] = {name:name,state:state,ball:ball,xd:xd,yd:yd,zd:zd,xf:xf,yf:yf,zf:zf}; } if(data.length != 10){ for(var j=0;j<(10-((data.length)%10));j++){ //補(bǔ)全最后一頁(yè)的空白行,使表格的長(zhǎng)度保持不變 data1[j+data.length] = {name:" ",state:"",ball:"",xd:"",yd:"",zd:"",xf:"",yf:"",zf:""}; } } var userOptions = { "id":"kingTable", //必須 表格id "head":["時(shí)間","運(yùn)行狀態(tài)","球頭狀態(tài)","X向位置/mm","Y向位置/mm","Z向位置/mm","X向承載力/Kg","Y向承載力/Kg","Z向承載力/Kg"], //必須 thead表頭 "body":data1, //必須 tbody 后臺(tái)返回的數(shù)據(jù)展示 "foot":true, // true/false 是否顯示tfoot --- 默認(rèn)false "displayNum": 10, //必須 默認(rèn) 10 每頁(yè)顯示行數(shù) "groupDataNum":6, //可選 默認(rèn) 10 組數(shù) sort:false, // 點(diǎn)擊表頭是否排序 true/false --- 默認(rèn)false search:false, // 默認(rèn)為false 沒(méi)有搜索 lang:{ gopageButtonSearchText:"搜索" } } var cs = new KingTable(null,userOptions); } });
注意:只要前臺(tái)或者后臺(tái)有一處設(shè)置了返回json對(duì)象,就無(wú)需使用eval()方法或$.parseJSON()方法解析了,再解析就出錯(cuò)。
總結(jié):以上幾種方式,推薦使用第二種方式,方便且不易出錯(cuò)。
五.eval()方法
var json對(duì)象=eval('('+json數(shù)據(jù)+')');大括號(hào)括起來(lái)的內(nèi)容被eval()執(zhí)行后返回的是一個(gè)JSON對(duì)象。
eval函數(shù)的工作原理:eval函數(shù)會(huì)評(píng)估一個(gè)給定的含有JavaScript代碼的字符串,并且試圖去執(zhí)行包含在字符串里的表達(dá)式或者一系列的合法的JavaScript語(yǔ)句。eval函數(shù)將把最后一個(gè)表達(dá)式或者語(yǔ)句所包含的值或引用作為返回值。
為什么要 eval這里要添加 “("("+data+")");//”呢?
原因在于:eval本身的問(wèn)題。 由于json是以”{}”的方式來(lái)開(kāi)始以及結(jié)束的,在JS中,它會(huì)被當(dāng)成一個(gè)語(yǔ)句塊來(lái)處理,所以必須強(qiáng)制性的將它轉(zhuǎn)換成一種表達(dá)式。加上圓括號(hào)的目的是迫使eval函數(shù)在處理JavaScript代碼的時(shí)候強(qiáng)制將括號(hào)內(nèi)的表達(dá)式(expression)轉(zhuǎn)化為對(duì)象,而不是作為語(yǔ)句(statement)來(lái)執(zhí)行。舉一個(gè)例子,例如對(duì)象字面量{},如若不加外層的括號(hào),那么eval會(huì)將大括號(hào)識(shí)別為JavaScript代碼塊的開(kāi)始和結(jié)束標(biāo)記,那么{}將會(huì)被認(rèn)為是執(zhí)行了一句空語(yǔ)句。
以上這篇基于$.ajax()方法從服務(wù)器獲取json數(shù)據(jù)的幾種方式總結(jié)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持創(chuàng)新互聯(lián)。
文章標(biāo)題:基于$.ajax()方法從服務(wù)器獲取json數(shù)據(jù)的幾種方式總結(jié)
路徑分享:http://aaarwkj.com/article28/jeigcp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計(jì)、網(wǎng)站內(nèi)鏈、域名注冊(cè)、搜索引擎優(yōu)化、企業(yè)網(wǎng)站制作、動(dòng)態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)