通過(guò)jsonp獲取json數(shù)據(jù)實(shí)現(xiàn)AJAX跨域請(qǐng)求
AJAX(異步的 JavaScript 和 XML)是用于創(chuàng)建快速動(dòng)態(tài)網(wǎng)頁(yè)的一種技術(shù),它在不重新加載整個(gè)頁(yè)面的情況下,與服務(wù)器交換數(shù)據(jù)并更新部分網(wǎng)頁(yè),ajax 使用XMLHttpRequest對(duì)象在后臺(tái)與服務(wù)器交換數(shù)據(jù),XMLHttpRequest 是 AJAX 的基礎(chǔ),它允許客戶(hù)端 JavaScript 通過(guò) HTTP請(qǐng)求連接到遠(yuǎn)程服務(wù)器。
但是,由于受到瀏覽器的限制,這種方法不可以進(jìn)行跨域訪問(wèn),如果使用這種方法進(jìn)行跨域訪問(wèn)則會(huì)出現(xiàn)安全問(wèn)題。不過(guò),我們可以發(fā)現(xiàn),在web頁(yè)面跨域調(diào)用 js文件時(shí),不會(huì)受到瀏覽器的限制,所以我們可以利用將遠(yuǎn)程服務(wù)器端的數(shù)據(jù)裝入js格式的文件,然后再用來(lái)供客戶(hù)端進(jìn)行調(diào)用。
JSON(JavaScript 對(duì)象表示法)是一種輕量級(jí)的文本數(shù)據(jù)交換格式,它具有自我描述性,易于理解。JSON 可通過(guò) 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 語(yǔ)法是 JavaScript 對(duì)象表示法語(yǔ)法的子集: 
數(shù)據(jù)在名稱(chēng)/值對(duì)中, 數(shù)據(jù)由逗號(hào)分隔 ,花括號(hào)保存對(duì)象, 方括號(hào)保存數(shù)組。
JSON的特性
- 純文本,易于跨平臺(tái)傳遞
 - Javascript原生支持,后臺(tái)語(yǔ)言幾乎全部支持
 - 使用輕量級(jí)的文本數(shù)據(jù)交換格式,適合在互聯(lián)網(wǎng)中傳遞
 - 比 XML 更小、更快,更易解析。
 
基于JSON的這些特性,可以通過(guò)使服務(wù)器動(dòng)態(tài)生成JSON文件,然后將客戶(hù)端需要的數(shù)據(jù)裝入這個(gè)文件,再將該文件調(diào)回客戶(hù)端供客戶(hù)端使用。為了便于客戶(hù)端使用數(shù)據(jù),逐漸形成了一種非正式傳輸協(xié)議JSONP,該協(xié)議的一個(gè)要點(diǎn)就是允許用戶(hù)傳遞一個(gè)callback參數(shù)給服務(wù)端,然后服務(wù)端返回?cái)?shù)據(jù)時(shí)會(huì)將這個(gè)callback參數(shù)作為函數(shù)名來(lái)裝入JSON數(shù)據(jù),這樣客戶(hù)端就可以隨意定制自己的函數(shù)來(lái)自動(dòng)處理返回?cái)?shù)據(jù)了。
如何使用JSONP
一種簡(jiǎn)單的方式就是使用jQuery來(lái)實(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",//傳遞給請(qǐng)求處理程序或頁(yè)面的,用以獲得jsonp回調(diào)函數(shù)名的參數(shù)名(一般默認(rèn)為:callback)
    jsonpCallback:"message",//自定義的jsonp回調(diào)函數(shù)名稱(chēng),默認(rèn)為jQuery自動(dòng)生成的隨機(jī)函數(shù)名,也可以寫(xiě)"?",jQuery會(huì)自動(dòng)為你處理數(shù)據(jù)
    success: function(json){
     alert('你的名字:' + json.name + ' 年齡: ' + json.age);
     
    },
    error: function(){
     alert('fail');
    }
   });
 
  });
  </script>
</head>
<body>
</body>
</html>
type:請(qǐng)求類(lèi)型,GET 或 POST,默認(rèn)為 GET;async:true(異步)或 false(同步),默認(rèn)情況下為true,同步請(qǐng)求將鎖住瀏覽器,用戶(hù)其它操作必須等待請(qǐng)求完成才可以執(zhí)行;url:發(fā)送請(qǐng)求的地址(跨域請(qǐng)求時(shí)應(yīng)為絕對(duì)地址);dataType:指定服務(wù)器返回的數(shù)據(jù)類(lèi)型;jsonpCallback:自定義JSONP回調(diào)函數(shù)名稱(chēng);success:請(qǐng)求成功后回調(diào)函數(shù);error:請(qǐng)求失敗時(shí)調(diào)用此方法。
運(yùn)行結(jié)果:

服務(wù)器返回的數(shù)據(jù)類(lèi)型:

返回一個(gè)指定函數(shù)名為message的回調(diào)函數(shù),函數(shù)里面包裹的數(shù)據(jù)為JSON格式。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 原生js實(shí)現(xiàn)ajax請(qǐng)求和JSONP跨域請(qǐng)求操作示例
 - 詳解Java Ajax jsonp 跨域請(qǐng)求
 - AJAX跨域請(qǐng)求JSONP獲取JSON數(shù)據(jù)的實(shí)例代碼
 - Ajax jsonp跨域請(qǐng)求實(shí)現(xiàn)方法
 - AJAX跨域請(qǐng)求之JSONP獲取JSON數(shù)據(jù)
 - AJAX跨域請(qǐng)求json數(shù)據(jù)的實(shí)現(xiàn)方法
 - 跨域請(qǐng)求之jQuery的ajax jsonp的使用解惑
 - AJAX跨域請(qǐng)求獲取JSON數(shù)據(jù)的實(shí)現(xiàn)方法
 
相關(guān)文章
 關(guān)于錨點(diǎn)跳轉(zhuǎn)及jQuery下相關(guān)操作與插件
錨點(diǎn)嘛,業(yè)余點(diǎn)的解釋就是可以讓頁(yè)面定位到某個(gè)位置的點(diǎn)。在高度較高的頁(yè)面中經(jīng)常見(jiàn)到2012-10-10
 jQuery插件pagination實(shí)現(xiàn)分頁(yè)特效
jQuery分頁(yè)插件示例,ajax方式的jQuery前端分頁(yè)插件,其核心代碼jquery.pagination.js已隨示例打包,Demo中包括了5種不同的分頁(yè)效果演示,全部是Ajax無(wú)刷新方式實(shí)現(xiàn)分頁(yè),對(duì)于搞前端開(kāi)發(fā)的朋友來(lái)說(shuō),這是個(gè)值得收藏的代碼特效,為以后實(shí)現(xiàn)無(wú)刷新分頁(yè)提供方便。2015-04-04
 javaScript和jQuery自動(dòng)加載簡(jiǎn)單代碼實(shí)現(xiàn)方法
給大家介紹一下利用javaScript和jQuery實(shí)現(xiàn)自動(dòng)加載最簡(jiǎn)單的代碼寫(xiě)法。2017-11-11
 jquery注冊(cè)文本框獲取焦點(diǎn)清空,失去焦點(diǎn)賦值的簡(jiǎn)單實(shí)例
下面小編就為大家?guī)?lái)一篇jquery注冊(cè)文本框獲取焦點(diǎn)清空,失去焦點(diǎn)賦值的簡(jiǎn)單實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-09-09
 jQuery實(shí)現(xiàn)頁(yè)面內(nèi)錨點(diǎn)平滑跳轉(zhuǎn)特效的方法總結(jié)
通過(guò)jQuery實(shí)現(xiàn)頁(yè)面內(nèi)錨點(diǎn)平滑跳轉(zhuǎn)的方法很多,可以通過(guò)插件hovertreescroll實(shí)現(xiàn),也可以簡(jiǎn)單的通過(guò)animate方法實(shí)現(xiàn),下面介紹這2種比較簡(jiǎn)單的方法。2015-05-05
 解決Jquery load()加載GB2312頁(yè)面時(shí)出現(xiàn)亂碼的兩種方案
jquery的字符集是utf-8,load方法加載完GB2312編碼靜態(tài)頁(yè)面后,出現(xiàn)中文亂碼,可以通過(guò)將兩個(gè)頁(yè)面的編碼格式轉(zhuǎn)換成utf8的方法來(lái)解決,具體如下,感興趣的朋友可以參考下2013-09-09
 ASP.NET jQuery 實(shí)例11 通過(guò)使用jQuery validation插件簡(jiǎn)單實(shí)現(xiàn)用戶(hù)登錄頁(yè)面驗(yàn)證功能
從這節(jié)開(kāi)始,我們開(kāi)始學(xué)習(xí)如何在ASP.NET控件中使用jQuery validation 插件,首先要用它,必須先了解它有什么用2012-02-02
 基于jQuery的前端數(shù)據(jù)通用驗(yàn)證庫(kù)
做了這么長(zhǎng)時(shí)間的開(kāi)發(fā),一直因?yàn)轵?yàn)證的問(wèn)題相當(dāng)?shù)目鄲?,不斷的?xiě)很多重復(fù)的代碼,對(duì)想偷懶的我來(lái)說(shuō)是相當(dāng)痛苦的。2011-08-08

