通過jsonp獲取json數(shù)據(jù)實(shí)現(xiàn)AJAX跨域請求
AJAX(異步的 JavaScript 和 XML)是用于創(chuàng)建快速動(dòng)態(tài)網(wǎng)頁的一種技術(shù),它在不重新加載整個(gè)頁面的情況下,與服務(wù)器交換數(shù)據(jù)并更新部分網(wǎng)頁,ajax 使用XMLHttpRequest對象在后臺(tái)與服務(wù)器交換數(shù)據(jù),XMLHttpRequest 是 AJAX 的基礎(chǔ),它允許客戶端 JavaScript 通過 HTTP請求連接到遠(yuǎn)程服務(wù)器。
但是,由于受到瀏覽器的限制,這種方法不可以進(jìn)行跨域訪問,如果使用這種方法進(jìn)行跨域訪問則會(huì)出現(xiàn)安全問題。不過,我們可以發(fā)現(xiàn),在web頁面跨域調(diào)用 js文件時(shí),不會(huì)受到瀏覽器的限制,所以我們可以利用將遠(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ù)由逗號(hào)分隔 ,花括號(hào)保存對象, 方括號(hào)保存數(shù)組。
JSON的特性
- 純文本,易于跨平臺(tái)傳遞
- Javascript原生支持,后臺(tái)語言幾乎全部支持
- 使用輕量級的文本數(shù)據(jù)交換格式,適合在互聯(lián)網(wǎng)中傳遞
- 比 XML 更小、更快,更易解析。
基于JSON的這些特性,可以通過使服務(wù)器動(dòng)態(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í)會(huì)將這個(gè)callback參數(shù)作為函數(shù)名來裝入JSON數(shù)據(jù),這樣客戶端就可以隨意定制自己的函數(shù)來自動(dòng)處理返回?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自動(dòng)生成的隨機(jī)函數(shù)名,也可以寫"?",jQuery會(huì)自動(dòng)為你處理數(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)文章
jQuery DateTimePicker 日期和時(shí)間插件示例
jQuery UI很強(qiáng)大,其中的日期選擇插件Datepicker是一個(gè)配置靈活的插件,這篇文章主要介紹了jQuery DateTimePicker 日期和時(shí)間插件示例,有興趣的可以了解一下。2017-01-01
基于jQuery實(shí)現(xiàn)以手風(fēng)琴方式展開和折疊導(dǎo)航菜單
這篇文章主要介紹了基于jQuery實(shí)現(xiàn)以手風(fēng)琴方式展開和折疊導(dǎo)航菜單的相關(guān)資料,需要的朋友可以參考下2016-01-01
jquery垂直公告滾動(dòng)實(shí)現(xiàn)代碼
公告滾動(dòng)想必大家都有見到過吧,實(shí)現(xiàn)方法也有很多,下面為大家介紹使用jquery實(shí)現(xiàn)垂直公告滾動(dòng),感興趣的朋友不要錯(cuò)過2013-12-12
jQuery中table數(shù)據(jù)的值拷貝和拆分
在開發(fā)的過程中,經(jīng)常會(huì)遇到彈出框顯示前一頁table列表的情況,這時(shí)候會(huì)有好多方法來來解決。下面小編給大家介紹怎么用jquery將值拷貝到第二頁并拆分拷貝的值,需要的朋友參考下2017-03-03
jQuery實(shí)現(xiàn)網(wǎng)頁抖動(dòng)的菜單抖動(dòng)效果
這篇文章主要介紹了jQuery實(shí)現(xiàn)網(wǎng)頁抖動(dòng)的菜單抖動(dòng)效果,鼠標(biāo)滑過菜單項(xiàng)可見到菜單項(xiàng)的抖動(dòng)效果,涉及jquery鼠標(biāo)事件及頁面元素樣式動(dòng)態(tài)操作的技巧,需要的朋友可以參考下2015-08-08
jQuery實(shí)現(xiàn)的上傳圖片本地預(yù)覽效果簡單示例
這篇文章主要介紹了jQuery實(shí)現(xiàn)的上傳圖片本地預(yù)覽效果,結(jié)合實(shí)例形式分析了jQuery上傳圖片本地預(yù)覽所涉及的相關(guān)頁面元素屬性動(dòng)態(tài)操作實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-03-03
jQuery實(shí)現(xiàn)的表格展開伸縮效果實(shí)例
這篇文章主要介紹了jQuery實(shí)現(xiàn)的表格展開伸縮效果,結(jié)合完整實(shí)例形式分析了jQuery響應(yīng)鼠標(biāo)事件動(dòng)態(tài)修改頁面元素的相關(guān)技巧,需要的朋友可以參考下2016-09-09

