闡述Json格式調(diào)用說明方法簡介
解決Json格式問題的方法很簡單,直接針對自己的問題需要,可以直接將此數(shù)組進(jìn)行拼串,但前提是要深入理解到底什么是FrontPage服務(wù)器,及他是怎么運(yùn)作的, 在這里拿出來和大家分享一下。
完善的 encode方法: 解決此問題的簡單方法就是 利用別人以完成的開源代碼: 首先想到 zend framework。 拿來 zf_json 包中的 Decoder.php, 和 Encoder.php。 Decoder.php其實(shí)只要將其中某個(gè)protect方法的 protect去掉就行。 具體操作忘了,讀者自行調(diào)試來解決。改寫好Decoder 類后,調(diào)用如下:
- $filepath = $_SERVER['DOCUMENT_ROOT'];
- include $filepath.'/inc/json/Encoder.php';
- $encoder = new Zend_Json_Encoder(false);
- $json = $encoder ->encode($result);
- header("X-JSON: $json");
由于很多使用json的地方還是在ajax調(diào)用中, 所以一些ajax '框架' 提供了decode方法:比如在prototype中, 如果php頁面包含了prototype.js, 那么就可以直接來調(diào)用 function(transport, json) { 。。操作} 在其中取json數(shù)據(jù) 就是 json.a ,Json格式 等了。
另外:可能遇到問題,編碼。 zend framework返回的漢字編碼估計(jì)不大對應(yīng)(不是說它不是utf-8)我的頁面編碼(utf-8),因此會(huì)有問題出現(xiàn)。因此對于某些驗(yàn)證返回的報(bào)錯(cuò)信息(漢字)會(huì)有影響。#t#
在這里的替代方法就是使用傳統(tǒng)的接口返回?cái)?shù)字代碼形式(通信網(wǎng)關(guān)經(jīng)常采用的方法),比如返回 json.code 有 0,1,2,3等多種可能。則在js端處理時(shí), 0表示成功,1表示非法的客戶端數(shù)據(jù),等等。 問題得到完美解決。
上面中,直接將這個(gè)字符串賦給一個(gè)變量,Json格式就變成一個(gè)Javascript數(shù)組了(專業(yè)化術(shù)語應(yīng)該不叫數(shù)組,不過由于PHP的習(xí)慣問題,我就一直叫數(shù)組好了,方便理解)。這樣,可以很方便的對arr進(jìn)行遍歷或者任意做你想做的事情了。
寫到這里,好像都沒提到AJAX哦?是哦,聯(lián)想一下,如果服務(wù)端返回的responseText用JSON過的字符串代替XML的話,前臺(tái)Javascript處理起來是不是很方便呢?狗皮膏藥就是這樣用的。
其實(shí)寫到這里,除了數(shù)據(jù)的存儲(chǔ)格式不太一樣外,JSON和XML也沒什么太大區(qū)別哦,不過下面我說的一點(diǎn)。雖然和XML沒多大關(guān)系,不過,可以說明JSON更大范圍的應(yīng)用,那就是,跨域的數(shù)據(jù)調(diào)用。
由于安全性問題,Json格式不支持跨域調(diào)用,這樣要調(diào)用不同域名下的數(shù)據(jù),很麻煩哦,雖然有解決方案(stone在他的講座上提到過了代理啊什么的雖然聽不懂但是知道能解決)。我寫兩個(gè)文件,足以展示跨域調(diào)用了。