



下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、自我! php和js如何通過(guò)json互相傳遞數(shù)據(jù) 當(dāng)我們?cè)诮Y(jié)合php和javascript實(shí)現(xiàn)某些功能時(shí),經(jīng)常會(huì)用到j(luò)son。json是js的一 種數(shù)據(jù)格式,可以直接被js解析。而php無(wú)法直接讀取json數(shù)據(jù),但是php提供了 json_decode函數(shù)來(lái)對(duì)json數(shù)據(jù)進(jìn)行轉(zhuǎn)化,從而可以被php腳本訪問(wèn)。同時(shí),php也提 供了 json二ncode函數(shù)來(lái)將數(shù)據(jù)轉(zhuǎn)化成json格式。那么,js中的原生json與php中通 json_encode函數(shù)轉(zhuǎn)化后的json是否完全一樣呢?今天,站長(zhǎng)就和大家一起來(lái)探討這 個(gè)問(wèn)題。 我們通過(guò)php向javascript傳遞數(shù)組數(shù)據(jù)時(shí),通常要將其轉(zhuǎn)化為json
2、格式,以便 javascript來(lái)獲取,那么我們就以數(shù)組為例,先來(lái)看一下兩者之間的區(qū)別。 1、一維數(shù)組 考慮php數(shù)組$array=array(T,2,3“);使用json_encode函數(shù)轉(zhuǎn)化后,對(duì)應(yīng)的json字符串 為rr,2,3。 細(xì)心的朋友很快就發(fā)現(xiàn),轉(zhuǎn)化后得到的json字符串,就是javascript中的數(shù)組形式,那么 是否可以用js的數(shù)組訪問(wèn)方式來(lái)訪問(wèn)呢? 當(dāng)然是可以的,但是你將這個(gè)json字符串傳遞給給js時(shí),需要使用urlencode函數(shù)對(duì)其 編碼,如: a href=javascriptshowf ) id=aj訪 問(wèn) json 我們可以用下面的js代碼來(lái)驗(yàn)證: functi
3、on show(str) var jobj=eval(decodeURI(str); alert(jobj2J); 大家自己試一試就會(huì)發(fā)現(xiàn),是的,可以用js中訪問(wèn)一維數(shù)組的方式來(lái)訪問(wèn)它。eval方法將 json字符串解釋為json對(duì)象,因?yàn)閭鬟f過(guò)來(lái)的是字符串,不轉(zhuǎn)化的話,你得到將是字符串 中第三個(gè)字符的值。 我們?cè)賮?lái)對(duì)這個(gè)一維數(shù)組做一下變化,我們發(fā)現(xiàn)上而的一維數(shù)組沒有指立索引,所以它默認(rèn) 為數(shù)字索引,現(xiàn)在我們來(lái)給它加上鍵名: 考慮 php 數(shù)組$array=array(a,=,2;c,=1);用 json_encode 函數(shù)轉(zhuǎn)化后,對(duì)應(yīng)的 json字符串為fa:r,b:2Tc:3 我們很快就發(fā)
4、現(xiàn)了其中的不同,最明顯的就是字符串兩端的變成了,那么這個(gè)字符串是 否也可以按上而那樣處理后被jS訪問(wèn)呢?我們不防試一試: a href=*javascript:showCrb二2:c=3);?y id=”aj”訪問(wèn) json function show(str) var jobj=eval(decodeURI(str); alert(jobj.a); 大家如果動(dòng)手試了就知道,點(diǎn)擊鏈接后,沒有出現(xiàn)彈窗。為什么呢?是PHP生成的json 字符串格式不對(duì)嗎?不是的,這是我們?cè)谑褂胑val函數(shù)解釋的時(shí)候,岀錯(cuò)了。把上而的函 數(shù)代碼換成: function show(str) var jobj=eval
5、(,(+decodeURI(str)+); alert(jobj.a); 再試試吧!怎么樣,可以訪問(wèn)了吧。這告訴我們,在使用eval方法處理帶有鍵爼的json 字符串時(shí),需要在字符串兩端加上括號(hào)。至于為什么,站長(zhǎng)也不知道,站在巨人的肩膀上而 已。 這里要注意,盡管PHP生成的json字符串傳遞給js后無(wú)法被直接解釋 為json格式,但是如果你在js中使用該字符串直接創(chuàng)建json數(shù)據(jù),是可以的。試試下面的代碼吧: varjobj=a:”r,”b:2,-c”:3; alert(jobj.b); 2、二維數(shù)組 二維數(shù)組在PHP用的應(yīng)用非常廣泛,因此了解二維數(shù)組轉(zhuǎn)化后的json格式非常重要。有 了上面
6、的例子做鋪墊,下而站長(zhǎng)就直接給出示例代碼: a href=javascript:show(,) id=劃訪問(wèn) json function show(str) var jobj=eval(decodeURI(str); alert(jobj00); 大家運(yùn)行,會(huì)發(fā)現(xiàn),這跟一維數(shù)組差不多,這是不帶鍵名的例子,因此在show函數(shù)中, 去掉字符串兩端的括號(hào)也是可以的。 3 度文庫(kù)辻每個(gè)人平等地提升自我! 下面,我們對(duì)二維數(shù)組進(jìn)行一下變化,在第二維中加入鍵名,請(qǐng)看示例代碼: a href=*javascript:showCl?b-=773Wy id=MajH訪問(wèn) json function show(s
7、tr) var jobj=evalCC+decodellRI(str)+y); alert(jobj0.a); 大家運(yùn)行代碼后,發(fā)現(xiàn),這里我們?cè)L問(wèn)json數(shù)據(jù)的方式有點(diǎn)不一樣。上而我們用的是 alert(jobj00)湎這里我們用的是alert(jobj0.a);不要問(wèn)我為什么.就是這樣。這就是json的訪問(wèn) 方式。 上面的例子,我們對(duì)二維數(shù)組的第二維添加了鍵名,下而我們對(duì)第一維添加鍵名,看看訪問(wèn) 方式又有什么不同: a href=-javascript:showCT id=*,aj 訪問(wèn) json function show(str) var jobj=evalC(+decodeURI(st
8、r)+y); alert(jobj.kl); 這里我們使用的是jobj.k這樣的方式,大家一定已經(jīng)發(fā)現(xiàn)只耍數(shù)組中含有鍵名,、”徴組被轉(zhuǎn)化為 json格式后就要使用json對(duì)儀健名這樣的方式來(lái)訪問(wèn)該鍵下的元素.上面的例子中,k鍵下的數(shù)組元 素是數(shù)字索引所以在json中使用kl這樣的方式來(lái)訪問(wèn)。 下面,我們對(duì)數(shù)組的第一維和第二維都添加鍵名: a href=javascript:show(*array(aB = 172733);?y id=Baje訪問(wèn) json function show(str) var jobj=evalCC+decodeURI(str)+y); alert(jobj.k.a)
9、; 正如上而所提到的,只要含有鍵冬,就必須以json對(duì)象惟名的方式來(lái)訪問(wèn),如果有多個(gè)鍵就 要用json對(duì)象.鍵名.鍵名不要問(wèn)我為什么,這就是json的訪問(wèn)方式,只有javascript的 發(fā)明者能向你解釋,他為什么要這樣規(guī)定。 結(jié)論: 1、將php中的數(shù)組轉(zhuǎn)化為json字符串傳遞給js時(shí)。如果數(shù)組沒有指左鍵名,那么可以宜 接使用js的eval方法將其轉(zhuǎn)化為json格式供js處理;如果數(shù)組中含有鍵劃,那么在使用 eval方法處理時(shí),需要使用()將json字符串括起來(lái)。 2、如果數(shù)組中含有鍵名,轉(zhuǎn)化為json字符串后,在js中要用json對(duì)象.鍵名.鍵名.的方式來(lái) 訪問(wèn),如果是數(shù)字索引則用json對(duì)彖或者json對(duì)象.鍵名這樣的方式。 上而,我們主要討論了,在PHP向js傳遞json字符串時(shí),需要注意的事項(xiàng)。下而我們?cè)?來(lái)討論,用js向php傳遞json字符串時(shí)需要如何處理。 聰明的你肯定已經(jīng)知道了,只要將json數(shù)據(jù)用引號(hào)引起來(lái)作為字符串傳遞給PHP通常用 ajax進(jìn)行】就可以用json_decode函數(shù)解碼了。沒錯(cuò)!就是這樣!但是在構(gòu)造json字符 串的時(shí)候一定要仔細(xì),如果你不經(jīng)常構(gòu)造json字符串,那么不妨用echo json_encode(a
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- T-ZJWL 001-2024 大宗商品供應(yīng)鏈金融動(dòng)產(chǎn)質(zhì)押監(jiān)管倉(cāng)儲(chǔ)服務(wù)規(guī)范
- T-ZNZ 264.3-2024 重金屬中度污染農(nóng)田土壤修復(fù)和安全利用技術(shù)規(guī)范 第3部分:超積累東南景天與芝麻輪作
- 二零二五年度服裝品牌廠家全國(guó)代理合作協(xié)議
- 2025年度電影院包場(chǎng)租賃及廣告合作合同
- 二零二五年度金融科技股權(quán)投資合同協(xié)議
- 二零二五年度工傷事故賠償調(diào)解協(xié)議(含傷殘?jiān)u定)
- 二零二五年度全包裝修合同模板含定制家具制作
- 2025年度離職賠償協(xié)議書中的離職員工離職通知及手續(xù)辦理
- 二零二五年度聯(lián)防聯(lián)控疫情防控科研合作合同
- 2025年度線上虛擬購(gòu)物體驗(yàn)合同書
- 生產(chǎn)車間管理制度辦法
- 機(jī)電企業(yè)管理導(dǎo)論第1章課件
- 水平一足球全冊(cè)教案
- 蘇教版科學(xué)二年級(jí)下冊(cè)全冊(cè)教案
- 約束評(píng)分標(biāo)準(zhǔn)
- GB/T 28799.2-2020冷熱水用耐熱聚乙烯(PE-RT)管道系統(tǒng)第2部分:管材
- 法律和道德的關(guān)系 課件
- GB 16780-2021水泥單位產(chǎn)品能源消耗限額
- 全面推進(jìn)依法行政課件
- 政務(wù)服務(wù)一網(wǎng)通辦平臺(tái)解決方案-最新
- 第十四屆全國(guó)交通運(yùn)輸行業(yè)職業(yè)技能競(jìng)賽(公路收費(fèi)及監(jiān)控員)賽項(xiàng)題庫(kù)-上(單選題匯總-共3部分-1)
評(píng)論
0/150
提交評(píng)論