通過jsonp獲取json數(shù)據(jù)實(shí)現(xiàn)AJAX跨域請求
AJAX(異步的 JavaScript 和 XML
)是用于創(chuàng)建快速動態(tài)網(wǎng)頁的一種技術(shù),它在不重新加載整個(gè)頁面的情況下,與服務(wù)器交換數(shù)據(jù)并更新部分網(wǎng)頁,ajax 使用XMLHttpRequest
對象在后臺與服務(wù)器交換數(shù)據(jù),XMLHttpRequest 是 AJAX 的基礎(chǔ),它允許客戶端 JavaScript 通過 HTTP
請求連接到遠(yuǎn)程服務(wù)器。
但是,由于受到瀏覽器的限制,這種方法不可以進(jìn)行跨域訪問,如果使用這種方法進(jìn)行跨域訪問則會出現(xiàn)安全問題。不過,我們可以發(fā)現(xiàn),在web頁面跨域調(diào)用 js文件時(shí),不會受到瀏覽器的限制,所以我們可以利用將遠(yuǎn)程服務(wù)器端的數(shù)據(jù)裝入js格式的文件,然后再用來供客戶端進(jìn)行調(diào)用。
JSON(JavaScript 對象表示法
)是一種輕量級的文本數(shù)據(jù)交換格式,它具有自我描述性,易于理解。JSON 可通過 JavaScript
進(jìn)行解析,JSON 數(shù)據(jù)可使用 AJAX
進(jìn)行傳輸。
JSON實(shí)例:
{ "employees": [ { "firstName":"Bill" , "lastName":"Gates" }, { "firstName":"George" , "lastName":"Bush" }, { "firstName":"Thomas" , "lastName":"Carter" } ] }
JSON 語法是 JavaScript 對象表示法語法的子集:
數(shù)據(jù)在名稱/值
對中, 數(shù)據(jù)由逗號
分隔 ,花括號
保存對象, 方括號
保存數(shù)組
。
JSON的特性
- 純文本,易于跨平臺傳遞
- Javascript原生支持,后臺語言幾乎全部支持
- 使用輕量級的文本數(shù)據(jù)交換格式,適合在互聯(lián)網(wǎng)中傳遞
- 比 XML 更小、更快,更易解析。
基于JSON
的這些特性,可以通過使服務(wù)器動態(tài)生成JSON
文件,然后將客戶端需要的數(shù)據(jù)裝入這個(gè)文件,再將該文件調(diào)回客戶端供客戶端使用。為了便于客戶端使用數(shù)據(jù),逐漸形成了一種非正式傳輸協(xié)議JSONP
,該協(xié)議的一個(gè)要點(diǎn)就是允許用戶傳遞一個(gè)callback
參數(shù)給服務(wù)端,然后服務(wù)端返回?cái)?shù)據(jù)時(shí)會將這個(gè)callback
參數(shù)作為函數(shù)名來裝入JSON
數(shù)據(jù),這樣客戶端就可以隨意定制自己的函數(shù)來自動處理返回?cái)?shù)據(jù)了。
如何使用JSONP
一種簡單的方式就是使用jQuery來實(shí)現(xiàn):
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html;charset=utf-8"> <title>test</title> <script type="text/javascript" src="http://apps.bdimg.com/libs/jquery/2.1.1/jquery.js"></script> <script type="text/javascript"> $(document).ready(function(){ $.ajax({ type: "get", async: false, url: "http://encounter.christmas023.space/json.php?name=mavis&age=18", dataType: "jsonp", jsonp: "callback",//傳遞給請求處理程序或頁面的,用以獲得jsonp回調(diào)函數(shù)名的參數(shù)名(一般默認(rèn)為:callback) jsonpCallback:"message",//自定義的jsonp回調(diào)函數(shù)名稱,默認(rèn)為jQuery自動生成的隨機(jī)函數(shù)名,也可以寫"?",jQuery會自動為你處理數(shù)據(jù) success: function(json){ alert('你的名字:' + json.name + ' 年齡: ' + json.age); }, error: function(){ alert('fail'); } }); }); </script> </head> <body> </body> </html>
type
:請求類型,GET 或 POST,默認(rèn)為 GET;async
:true(異步)或 false(同步),默認(rèn)情況下為true,同步請求將鎖住瀏覽器,用戶其它操作必須等待請求完成才可以執(zhí)行;url
:發(fā)送請求的地址(跨域請求時(shí)應(yīng)為絕對地址);dataType
:指定服務(wù)器返回的數(shù)據(jù)類型;jsonpCallback
:自定義JSONP回調(diào)函數(shù)名稱;success
:請求成功后回調(diào)函數(shù);error
:請求失敗時(shí)調(diào)用此方法。
運(yùn)行結(jié)果:
服務(wù)器返回的數(shù)據(jù)類型:
返回一個(gè)指定函數(shù)名為message
的回調(diào)函數(shù),函數(shù)里面包裹的數(shù)據(jù)為JSON
格式。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
關(guān)于錨點(diǎn)跳轉(zhuǎn)及jQuery下相關(guān)操作與插件
錨點(diǎn)嘛,業(yè)余點(diǎn)的解釋就是可以讓頁面定位到某個(gè)位置的點(diǎn)。在高度較高的頁面中經(jīng)常見到2012-10-10jQuery插件pagination實(shí)現(xiàn)分頁特效
jQuery分頁插件示例,ajax方式的jQuery前端分頁插件,其核心代碼jquery.pagination.js已隨示例打包,Demo中包括了5種不同的分頁效果演示,全部是Ajax無刷新方式實(shí)現(xiàn)分頁,對于搞前端開發(fā)的朋友來說,這是個(gè)值得收藏的代碼特效,為以后實(shí)現(xiàn)無刷新分頁提供方便。2015-04-04javaScript和jQuery自動加載簡單代碼實(shí)現(xiàn)方法
給大家介紹一下利用javaScript和jQuery實(shí)現(xiàn)自動加載最簡單的代碼寫法。2017-11-11jquery注冊文本框獲取焦點(diǎn)清空,失去焦點(diǎn)賦值的簡單實(shí)例
下面小編就為大家?guī)硪黄猨query注冊文本框獲取焦點(diǎn)清空,失去焦點(diǎn)賦值的簡單實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-09-09jQuery實(shí)現(xiàn)頁面內(nèi)錨點(diǎn)平滑跳轉(zhuǎn)特效的方法總結(jié)
通過jQuery實(shí)現(xiàn)頁面內(nèi)錨點(diǎn)平滑跳轉(zhuǎn)的方法很多,可以通過插件hovertreescroll實(shí)現(xiàn),也可以簡單的通過animate方法實(shí)現(xiàn),下面介紹這2種比較簡單的方法。2015-05-05解決Jquery load()加載GB2312頁面時(shí)出現(xiàn)亂碼的兩種方案
jquery的字符集是utf-8,load方法加載完GB2312編碼靜態(tài)頁面后,出現(xiàn)中文亂碼,可以通過將兩個(gè)頁面的編碼格式轉(zhuǎn)換成utf8的方法來解決,具體如下,感興趣的朋友可以參考下2013-09-09ASP.NET jQuery 實(shí)例11 通過使用jQuery validation插件簡單實(shí)現(xiàn)用戶登錄頁面驗(yàn)證功能
從這節(jié)開始,我們開始學(xué)習(xí)如何在ASP.NET控件中使用jQuery validation 插件,首先要用它,必須先了解它有什么用2012-02-02基于jQuery的前端數(shù)據(jù)通用驗(yàn)證庫
做了這么長時(shí)間的開發(fā),一直因?yàn)轵?yàn)證的問題相當(dāng)?shù)目鄲?,不斷的寫很多重?fù)的代碼,對想偷懶的我來說是相當(dāng)痛苦的。2011-08-08