婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 淺析json與jsonp區別及通過ajax獲得json數據后格式的轉換

淺析json與jsonp區別及通過ajax獲得json數據后格式的轉換

熱門標簽:硅語電話機器人公司 ai機器人電銷資源 越南河內地圖標注 地圖標注項目怎么樣 個人怎樣在百度地圖標注地名 云呼外撥網絡電話系統 機器人電銷騙局揭秘 騰訊地圖標注位置能用多久 超級大富翁地圖標注

 有關json與jsonp的區別(json才是目的,jsonp只是手段)介紹如下所示:

一言以蔽之,json返回的是一串數據;而jsonp返回的是腳本代碼(包含一個函數調用);

JSON其實就是JavaScript中的一個對象,跟var obj={}在質上完全一樣,只是在量上可以無限擴展。簡單地講,json其實就是JavaScript中的對象(Object)和數組(Array,其實也是對象)這倆好基友在那兒你嵌我我嵌你地套上n多層,以此模擬出許多復雜的數據結構。

json易于人閱讀和編寫,也易于機器解析和生成,相對網絡傳輸速率較高,功能型網站前后端往往要頻繁大量交換數據,而json憑借其強大的表現力和高顏值漸漸地成為理想的前后端數據交換語言。那xml前輩呢,我覺得應該會像微軟的xp那樣功成身退。

同源(不懂同源策略的童鞋請自行百度)下的前后端數據交換格式確定使用json了,那么問題來了,如果我想獲取別人網站上提供的數據腫么做到呢?也就是跨域讀取數據問題(不要鉆牛角說你不需要讀取其他網站的數據,相信我,你早晚得需要),json行不行呢?答案是No Way,為什么呢,因為json只是普通的文本格式,能讓你這樣就輕松拿到那服務端就沒有任何安全和保密性可言了,這樣的話互聯網世界非亂套不可,這個問題那些牛X的規范制定者早就想到了,所以使用了同源策略來限制文件獲取。最后的結果就是只有像img、script、iframe這類可以指定src屬性的標簽有跨域獲取別人網站上數據(圖片,腳本,源文件其實都是數據)的能力。比如:

!--京東商品圖片-->
img src="http://img30.360buyimg.com/jgsq-productsoa/jfs/t2407/323/1635505465/47386/f2d89d88/56615e00N7a475ee6.jpg" />
!--百度CDN-->
script src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js">/script> 

看來直接獲取json是行不通了,那有沒有其他方法能拿到數據呢?于是乎jsonp就這樣被聰明的開發者給發現了,為什么說是發現而不是發明呢,因為并沒有涉及到任何新技術,就像發現ajax一樣。

jsonp原理是這樣的,網站A需要獲取網站B的數據,網站B說我給你們一個方法,【1. 你們使用script src="http://www.B.com/open.js">/script>標簽先獲取到open.js文件(網站B的責任),這里邊有你們需要的數據。2. 你們獲取數據后處理數據(總得處理數據吧)的方法名必須命名為foo(數據請求者的責任和義務)】,這里相當于B網站和請求獲取數據者之間建立了一個協議,要求請求者務必按照規則辦事,如果請求者不能同時遵守上面兩條就不能按預期獲取數據。額..,這也算相當于建立了一個潛規則吧

open.js內容

foo({"name":"B","age":23});  //為什么不直接寫成json數據{"name":"B","age":23}呢,原因很簡單,在js文件總得合乎js語法吧
//這也是為什么協議中明確規定處理數據的方法名必須命名為foo,因為B網站是在假定請求者的腳本中已經定義了數據處理方法foo的情況下返回數據;
//不然就會報foo is not defined錯誤

網站A腳本須有

function foo(data){
console.log(data);
//ToDo.. 
} 

啊!雖然拐了個彎,但數據總算得到了,網站A,網站B都非常高興,那么問題又來了,網站C說也需要獲取網站B的數據,網站B把協議甩給它,網站C拿過來一看,草泥馬啊,foo這個名字已經在自己的腳本文件的6868行用過了,而且已經使用在腳本的各個角落,批量替換會導致很多潛在bug啊,網站B情急之下決定把foo改成fool,網站A立馬蹦起來,因為自己的網站已經在很多地方使用foo引用了數據。

為了避免上面情況發生,那些牛X哄哄的開發者使用了動態生成js文件的方法,php版本如下:

open.php

?php
header('Content-type: application/javascript');
$jsonCallback = htmlspecialchars($_REQUEST ['callback']); //獲取請求者自定義的回調函數名
$jsonData ='{"name":"B","age":23}'; //待返回的json數據
echo $jsonCallback . "(" . $jsonData . ")"; //輸出jsonp格式的數據,即一行函數調用語句
?> 

額 ..,至于php為什么能返回js格式文件,自行百度。

于是網站A用script src="http://www.B.com/open.php?callback=foo">/script>來請求數據,不需要修改任何變量,返回給A的腳本文件內容是:

foo({"name":"B","age":23}); //所謂的jsonp,就是一句函數調用,數據都被包裹傳遞到參數中了,千萬別穿個馬甲就不認識了 
網站C就用script src="http://www.B.com/open.php?callback=blah">/script>來請求數據,返回給C的腳本文件內容是:
blah({"name":"B","age":23}); 
網站N就用script src="http://www.B.com/open.php?callback=what">/script>來請求數據,返回給N的腳本文件內容是:
what({"name":"B","age":23}); 

Problem Solved,大家都取到了期望的數據,并且避免了命名沖突。

jsonp全名叫做json with padding,很形象,就是把json對象用符合js語法的形式包裹起來以使其它網站可以請求得到,也就是將json數據封裝成js文件;

json是理想的數據交換格式,但沒辦法跨域直接獲取,于是就將json包裹(padding)在一個合法的js語句中作為js文件傳過去。這就是json和jsonp的區別,json是想要的東西,jsonp是達到這個目的而普遍采用的一種方法,當然最終獲得和處理的還是json。所以說json是目的,jsonp只是手段。json總會用到,而jsonp只有在跨域獲取數據才會用到。

理解了json和jsonp的區別之后,其實ajax里的跨域獲取數據就很好理解和實現了,同源時候并沒有什么特別的,直接取就行,跨域時候需要拐個彎來達到目的。

附上jquery中ajax請求json數據實例:

(同源):

$.ajax({
url:"persons.json",
success:function(data){
    console.log(data);
     //ToDo..
  }
}); 

(跨域):

$.ajax({
url:"http://www.B.com/open.php?callback=?",
dataType:"jsonp",
success:function(data){
console.log(data);
//ToDo..
}
}); 

jquery已把jsonp封裝進ajax,很合理,因為畢竟絕大多數的jsonp請求都是ajax,關于jquery的ajax具體用法請自行百度,另外要注意的一點就是不同的網站提供的數據接口的$_REQUEST ['callback']中不一定絕對是callback也可能是cb,cbk等,具體使用時務必閱讀服務端提供的有關接口使用的詳細文檔。

下面給大家介紹下由“夜未央0906”寫的通過ajax獲得json數據后格式的轉換

在有些情況下獲取到的json數據可能是string類型的,需要把其格式化為json對象才方便解析。

a)原生js通過ajax獲取到的json

  此時返回的數據默認是string型的,所以需要用eval()函數將其轉化為json對象。需要注意函數內字符串的格式:eval(“(” + data+“)”),因為返回的string是在{}里面的,eval會將大括號識別為js代碼塊開始和結束的標志,所以必須加上(),將其強制轉化為對象來處理。

b)jquery獲取

  1:通過ajax()異步請求并把type設置為json,返回的就是json對象。

  2:通過用與ajax()等價的$.getJSON(url,data1,function(data2,status,xhr){//......})方法獲取的也是json對象。其中data1為連同請求發送的數據,data2為服務器返回的數據即json對象。

您可能感興趣的文章:
  • SpringMVC多個文件上傳及上傳后立即顯示圖片功能
  • SpringMVC框架實現上傳圖片的示例代碼
  • SpringMVC中MultipartFile上傳獲取圖片的寬度和高度詳解
  • SpringMVC上傳圖片與訪問
  • php將從數據庫中獲得的數據轉換成json格式并輸出的方法
  • JAVA對象JSON數據互相轉換的四種常見情況
  • JS對象與JSON格式數據相互轉換
  • springmvc圖片上傳及json數據轉換過程詳解

標簽:鄭州 遼源 海南 邢臺 舟山 林芝 內蒙古 洛陽

巨人網絡通訊聲明:本文標題《淺析json與jsonp區別及通過ajax獲得json數據后格式的轉換》,本文關鍵詞  淺析,json,與,jsonp,區別,及,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《淺析json與jsonp區別及通過ajax獲得json數據后格式的轉換》相關的同類信息!
  • 本頁收集關于淺析json與jsonp區別及通過ajax獲得json數據后格式的轉換的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    蜜桃视频在线一区| 国产丝袜欧美中文另类| av电影在线观看不卡| 国产精选一区二区三区| 国产精品91一区二区| 国产精品1区2区| 国产精品综合一区二区| 国产91丝袜在线播放九色| 国产在线日韩欧美| 风间由美一区二区av101| 成人不卡免费av| 在线视频欧美精品| 日韩一区二区三区三四区视频在线观看 | 欧美日免费三级在线| 欧美日韩一卡二卡三卡| 91麻豆精品国产91久久久久久| 欧美一区二区三区啪啪| 久久久久久久综合| 亚洲婷婷国产精品电影人久久| 亚洲精品国产第一综合99久久 | 欧美三级电影网站| 欧美一区二区三区爱爱| 久久久亚洲精华液精华液精华液 | 亚洲色图一区二区三区| 亚洲曰韩产成在线| 国产一区二区三区四| 91在线高清观看| 欧美丰满美乳xxx高潮www| 久久久夜色精品亚洲| 悠悠色在线精品| 理论电影国产精品| 9人人澡人人爽人人精品| 91精品欧美一区二区三区综合在| 久久精品一区二区三区不卡牛牛| 亚洲精品日日夜夜| 国产一区二区三区免费播放| 91久久免费观看| 2023国产精品| 亚洲综合精品自拍| 成人国产精品视频| 欧美不卡在线视频| 亚洲18色成人| 99精品久久99久久久久| 精品理论电影在线观看| 亚洲电影一级黄| 成人激情免费视频| 精品国产91亚洲一区二区三区婷婷| 国产精品毛片久久久久久久| 久草中文综合在线| 欧美日韩美少妇| 亚洲欧美一区二区三区国产精品| 国产在线播放一区二区三区| 欧美日韩免费观看一区二区三区| 国产精品萝li| 丁香啪啪综合成人亚洲小说| 日韩欧美一级二级三级| 亚洲一区在线视频观看| 不卡av电影在线播放| 久久久久久久久97黄色工厂| 日本欧美在线看| 欧美精品一二三区| 一区二区三区在线观看网站| 91一区二区在线| 中文字幕中文字幕一区二区| 国产.精品.日韩.另类.中文.在线.播放| 777精品伊人久久久久大香线蕉| 亚洲少妇屁股交4| 成人av免费在线| 中文字幕字幕中文在线中不卡视频| 国产成人精品免费一区二区| 亚洲精品一线二线三线| 国产一区二区伦理| 久久精品亚洲乱码伦伦中文| 国产成人精品一区二区三区四区| 国产精品视频一二三区| av高清不卡在线| 最新日韩av在线| 色噜噜偷拍精品综合在线| 亚洲视频在线一区二区| 在线观看日韩高清av| 亚洲国产精品人人做人人爽| 制服丝袜在线91| 国产在线精品视频| 国产精品国产精品国产专区不蜜| 不卡av在线网| 午夜av电影一区| 精品福利av导航| 高清国产午夜精品久久久久久| 欧美激情自拍偷拍| 99riav一区二区三区| 亚洲国产日韩在线一区模特| 日韩三级在线免费观看| 国产91在线观看| 亚洲一区二区在线观看视频| 日韩一级大片在线观看| 国产成人自拍在线| 亚洲成a人v欧美综合天堂下载| 日韩一区二区三区在线视频| 国产91精品一区二区麻豆亚洲| 亚洲精品乱码久久久久久日本蜜臀| 在线不卡一区二区| 国产精品一区二区三区99| 一区二区在线观看免费| 日韩一级精品视频在线观看| 国产成人精品免费网站| 五月天激情综合| 中文字幕一区二区三区视频 | 高清日韩电视剧大全免费| 亚洲午夜一区二区| 国产欧美日产一区| 欧美日韩精品一区二区三区蜜桃 | 国产suv精品一区二区6| 一区二区三区视频在线看| 日韩久久久久久| 欧美综合在线视频| 国产成人免费视频一区| 日本v片在线高清不卡在线观看| 中文字幕av不卡| 欧美一区二区三区系列电影| 91欧美一区二区| 国产成人久久精品77777最新版本| 无吗不卡中文字幕| 一区二区三区在线免费| 国产精品成人在线观看| 久久综合色之久久综合| 日韩三级视频在线看| 欧美在线|欧美| 91麻豆6部合集magnet| 国产精品77777| 国产一区二区在线观看视频| 日本成人在线电影网| 亚洲综合一区二区三区| 亚洲六月丁香色婷婷综合久久| 中文字幕的久久| 中文字幕成人在线观看| 国产亚洲欧美一区在线观看| 日韩精品中文字幕在线一区| 91精品在线免费| 日韩视频一区二区在线观看| 欧美一区二区精品久久911| 欧美日韩国产首页| 欧美猛男gaygay网站| 欧美日韩亚洲国产综合| 色狠狠一区二区三区香蕉| 色婷婷狠狠综合| 一本在线高清不卡dvd| 色综合咪咪久久| 91九色最新地址| 欧美精品成人一区二区三区四区| 欧美午夜理伦三级在线观看| 欧美日韩国产精品自在自线| 在线视频你懂得一区二区三区| 欧美中文字幕亚洲一区二区va在线 | 不卡的av在线| 99久久精品国产一区二区三区| 成人avav影音| 91国偷自产一区二区三区成为亚洲经典 | 久久国产免费看| 国产一区二区精品久久99| 国产乱码精品一品二品| 国产91精品久久久久久久网曝门| 成人精品电影在线观看| 91免费国产视频网站| 欧美四级电影网| 欧美成人女星排名| 欧美国产国产综合| 亚洲影视在线播放| 日韩二区三区四区| 狠狠狠色丁香婷婷综合激情 | 在线播放/欧美激情| 欧美第一区第二区| 欧美激情一区三区| 亚洲精品日韩一| 亚洲成精国产精品女| 国产中文字幕精品| 日本精品免费观看高清观看| 91精品国产品国语在线不卡| 亚洲国产成人私人影院tom| 一区二区高清在线| 精品亚洲国产成人av制服丝袜| 成人国产精品免费观看| 欧美图区在线视频| 国产欧美精品一区aⅴ影院 | 国产一本一道久久香蕉| 91婷婷韩国欧美一区二区| 91精品久久久久久蜜臀| 国产精品区一区二区三区| 亚洲成人免费在线观看| 国产乱码精品一区二区三区av | 成人aa视频在线观看| 制服丝袜成人动漫| 亚洲手机成人高清视频| 韩国av一区二区三区四区 | 日韩一区二区精品| 亚洲人妖av一区二区| 韩国成人福利片在线播放| 欧美体内she精高潮| 国产精品久久久久影院亚瑟 | 91丨porny丨首页| wwww国产精品欧美|