解決JSon格式問題的方法很簡單,直接針對自己的問題需要,可以直接將此數組進行拼串,但前提是要深入理解到底什麼是FrontPage服務器,及他是怎麼運作的, 在這裡拿出來和大家分享一下。
完善的 encode方法: 解決此問題的簡單方法就是 利用別人以完成的開源代碼: 首先想到 zend framework。 拿來 zf_JSon 包中的 Decoder.php, 和 Encoder.php。 Decoder.PHP其實只要將其中某個protect方法的 protect去掉就行。 具體操作忘了,讀者自行調試來解決。改寫好Decoder 類後,調用如下:
- $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調用中, 所以一些AJax '框架' 提供了decode方法:比如在prototype中, 如果PHP頁面包含了prototype.js, 那麼就可以直接來調用 function(transport, json) { 。。操作} 在其中取json數據 就是 JSon.a ,JSon格式 等了。
另外:可能遇到問題,編碼。 zend framework返回的漢字編碼估計不大對應(不是說它不是utf-8)我的頁面編碼(utf-8),因此會有問題出現。因此對於某些驗證返回的報錯信息(漢字)會有影響。
在這裡的替代方法就是使用傳統的接口返回數字代碼形式(通信網關經常采用的方法),比如返回 json.code 有 0,1,2,3等多種可能。則在JS端處理時, 0表示成功,1表示非法的客戶端數據,等等。 問題得到完美解決。
上面中,直接將這個字符串賦給一個變量,JSon格式就變成一個Javascript數組了(專業化術語應該不叫數組,不過由於PHP的習慣問題,我就一直叫數組好了,方便理解)。這樣,可以很方便的對arr進行遍歷或者任意做你想做的事情了。
寫到這裡,好像都沒提到AJax哦?是哦,聯想一下,如果服務端返回的responseText用JSON過的字符串代替XML的話,前台Javascript處理起來是不是很方便呢?狗皮膏藥就是這樣用的。
其實寫到這裡,除了數據的存儲格式不太一樣外,JSON和XML也沒什麼太大區別哦,不過下面我說的一點。雖然和XML沒多大關系,不過,可以說明JSON更大范圍的應用,那就是,跨域的數據調用。
由於安全性問題,JSon格式不支持跨域調用,這樣要調用不同域名下的數據,很麻煩哦,雖然有解決方案(stone在他的講座上提到過了代理啊什麼的雖然聽不懂但是知道能解決)。我寫兩個文件,足以展示跨域調用了。