最近在做商城項目時遇到一個json返回報錯的問題,經過檢查,發現是沒有對特殊字符進行處理,到時json被截斷,從而導致ajax讀取時報錯。最后,通過base64對特殊字符進行編碼才予以解決,現分享在此,供君參考。
業務流程是:前端頁面中有一個“收貨信息”表單供用戶填寫,然后以otip字段存儲在Mysql數據庫中,服務端使用PHP做了一個webservice接口,其中通過json的方式返回otip字段,前端通過ajax的異步方法獲取上述json并予以展示。
問題:當otip為基本內容時,測試一切OK。但當在表單中換行時,ajax無法正確輸出結果,頁面無法正常顯示。
排查:ajax的error方法返回"200 4 parsererror",通過瀏覽器直接訪問webservice時,接口數據可以正常返回。
分析:推測是由于otip中存在換行等特殊字符導致jason數據格式被截斷,導致ajax中的json類型無法準確識別。
思路:在PHP中對otip進行base64編碼,然后在js中進行解碼,具體代碼如下:
PHP側:
$tips = urlencode(base64_encode($data["otip"]));
$result = array("tip"=>$tips);
echo urldecode(json_encode($result));
js側:
var base = new Base64();
$("#tipInput").val(base.decode(response.tip));
關于Base64的定義,百度上有很多實現。
至此,該問題已經解決,讀者可以參考。