這兩天看jquery手冊的時候看到了jsonp。發現手冊把jsonp與json放在一塊兒講解了,因此想寫篇文章 梳理一下這三者的關係。javascript
jsonp是json的一種「使用模式」,可讓網頁從別的域名(網站)獲取資料,即跨域讀取數據。html
由於同源策略因此當咱們從不一樣的域訪問數據時須要使用jsonp。同源策略是瀏覽器的安全功能。java
jsonp的核心則是動態的添加<script>標籤來調用服務器的js腳本。jquery
看jsonp.html頁面的代碼:json
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></title> <script type="text/javascript"> // 獲得航班信息查詢結果後的回調函數 var flightHandler = function(data){ alert('你查詢的航班結果是:票價 ' + data.price + ' 元,' + '餘票 ' + data.tickets + ' 張。'); }; // 提供jsonp服務的url地址(無論是什麼類型的地址,最終生成的返回值都是一段javascript代碼) var url = "http://flightQuery.com/jsonp/flightResult.aspx?code=CA1998&callback=flightHandler"; // 建立script標籤,設置其屬性 var script = document.createElement('script'); script.setAttribute('src', url); // 把script標籤加入head,此時調用開始 document.getElementsByTagName('head')[0].appendChild(script); </script> </head> <body> </body> </html>
json 是javascript對象表示法跨域
json是輕量級的數據交換格式數組
json是獨立於語音的瀏覽器
json具備自我描述性,更容易理解安全
json文本格式在語法上於建立JavaScript對象的代碼是相同的,無需解釋,JavaScript程序可以使用內建的eval()函數,用json數據生成原生的JavaScript對象。服務器
json語法是JavaScript的對象表示法語法的子集
語法規則:
{ "sites": [ { "name":"菜鳥教程" , "url":"www.runoob.com" }, { "name":"google" , "url":"www.google.com" }, { "name":"微博" , "url":"www.weibo.com" } ] }
XML是可擴展標記語言。是一門語言。XML被設計用來傳輸和存儲數據。
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
對於 AJAX 應用程序來講,JSON 比 XML 更快更易使用: