2010年2月8日 星期一

又是編碼的問題

用jetpack寫出來的firefox的plug-in
總算有個有結果的版本~
但問題依然很多

昨天花了點時間處理一個奇妙的問題

由於整個流程會經過三個種語言~

從client端的javascript~利用ajax的方法呼叫php~然後在php中執行java對資料做處理

而最後要在client端顯示的html內容~我在java就拼湊好了

一開始也是試了很久~最後決定在java中拼湊好原始的html~然後做完urlencode後~再一路回傳到client的 javascript~再做urldecode

這個做法可以讓最後顯示在side bar的內容看起來是對的

而且點擊連結後~也能正常的跳出搜尋頁面

但問題就在~在跳出的搜尋頁面中無法再做一次關鍵字推薦

總之又是編碼的問題

就是說~在html中a 和 /a包起來要顯示的關鍵字在回傳時需要作encode

但在 a 的href中~連到google搜尋頁面的網址~其中參數q的值~雖然等於要顯示的關鍵字~但卻不用encode

如果做過encode~在要做第二次關鍵字推薦時~擷取網址列上的Query時~會有問題

為了解決這個問題~

所以嘗試使用jQuery的getJSON~

在java的部分~將每個推薦的關鍵字encode後~存入陣列

最後把陣列做json的序列化~產生對應的字串

將此字串一路回傳~最後透過getJSON還原成對應的資料結構

一切都是如此的理所當然~~


但...

同樣的東西~我在asp用的好好的

在這邊就是有問題~

getJSON怎樣都無法~把java序列化的字串還原..

改用post的方式後~明明就可以看到序列化的字串

試了很多方式~在中間層的php上動了很多手腳

做過很多測試:

1. 在php上產生一個陣列~插入一些測試值~用php的json_encode處理後~回傳給getJSON~
正常~資料結構有被還原

2.在php上先將java產生的json字串~用php的json_decode處理後~回傳還原的陣列中~其中一個cell的值~在javascript中用post接收
正常~顯示出來的的確為指定的值

以上兩個測試只是為了證明php的json_encode和decode都是沒問題的

甚至將java產生的json字串複製後~在php中貼上直接回傳給javascript都沒有問題~getJSON依然可以還原

但....

直接將java產生的字串回傳到php再回傳到javascript~getJSON就是無法還原對應的資料結構...

這問題真的搞了很久...

因為我一直覺得字串在這三層互相傳遞中~其中兩層的互傳時~一定要先編碼

而我也一直認為這兩層一定就是javascript和php

所以~這問題我想了很久都解決不了

直到...

我嘗試在php中將java回傳的json字串還原後~拼湊好html~再用post回傳給javascript

我發現~這樣顯示居然是正常的

原來需要編碼才能傳遞的兩層是~php和java

雖然解決了這個問題~~

但getJSON的問題還是無解啊!!!

沒有留言: