遇到錯誤的襲擊,
錯誤出現,使用jquery中ajax進行查詢數據時執行完以后,需要把數據封裝成為JSON類型的數據,並傳遞到前台去的時候出現Invalid JSON 錯誤,經查找后發現是在使用textarea文本域進行數據獲取並插入到數據庫的時候插入了一個回車符號,在獲取到以后進行了傳遞,但是 JSON傳值的時候,如果有回車符就會掛掉,需要對其進行處理
JSON 處
使用到的工具jsonlint可以檢測出json數據是否正確。
經檢測后返現在這里出現了換行動作。
追溯到根源,在使用textarea時沒有設置 虛擬換行屬性 在輸入時導致把換行符錄入到數據庫中,從而使數據再次查出並使用JSON傳遞時出現了格式錯誤的問題。
問題處理:
把已壞的數據進行手工處理,並在textarea中添加上wrap屬性。
后又經過測試,textarea 的屬性warp="virtual" 這個屬性並沒有想象中的那么強大,當遇到用戶自己手動輸入回車/r/n的時候其實還是會掛掉的:
1.首先對於包含\r\n的數據提交可以使用post方法進行提交,這樣可以不影響提交時內容的解析,使用get方式會有問題,本身也不提倡使用get方式發送請求,如果非要用get,請使用escape進行處理
2.對於包含\r\n字符串的顯示和讀取的處理辦法,最簡單的辦法,使用xml方式進行解析,就不會存在任何問題,包括一些特殊字符的問題,如果不使用xml方式進行解析,而使用json解析,虛擬回車換行不經任何處理是沒有任何問題的,但人為的包含\r\n的內容就會產生問題,此時的解決辦法比較麻煩。。。。
$.post(url, { }, function(data,status){ if(status=="success"){ data = data.replace(/^[\r\n\s]*|[\r\n\s]*$/g, "");// 表示去掉開頭和結尾的回車、換行和空格 data = data.replace(/[\r\n]/g, "<br>");//將json中的所有回車換行替換為<br> } } )
data = data.replace(/^[\r\n\s]*|[\r\n\s]*$/g, "");// 表示去掉開頭和結尾的回車、換行和空格
data = data.replace(/[\r\n]/g, "<br>");//將json中的所有回車換行替換為<br>
$("#YL").val(obj.yl.replace(/<br>/g, "\r\n"));//在為文本域賦值時,再將<br>替換回來
如果直接在頁面上顯示內容,則無需替換回來,但不要加pre預處理標簽了。。。。。。。。。。
如果本身的json字符串就包含正常的回車換行,也會被替換掉,所以回傳的json字符串不能包含為了閱讀方便而在程序中認為添加的回車換行