源頭
出現這個報錯提示,根本原因只有一個--json解析異常,所以請大家直接去關注自己json的返回數據注意檢查其返回內容和內容的格式是否正確,至於本文血案的導火索是因為json注釋滴問題。
事發--血案
有一天一個朋友找我商量,說用jquery的ajax什么都寫對了,可數據就是不正常顯示,我說發核心代碼我look下,如圖1
我也反復檢查了幾遍確實沒問題,那。。。。。。我突然發現他的代碼中只存在了異步success的回調,既然不走成功回調,那就看下error函數咯,error函數我們不經常使用,其有三個參數XMLHttpRequest對象, textStatus錯誤文本描述, errorThrown錯誤發生時才會被傳遞。在error里添加一個log發現被打印了,ajax這個過程確實存在異常,但具體哪個方向的依舊未知。打印了一下textStatus發現輸出parsererror,解析錯誤。好了,此刻可以斷定ajax通信是正常的。也就是XMLHttpRequest.readyState已經為4了,那就代表客戶端和服務端通信完成,數據已經拿回本地,最后可以確定報錯的原因就是在json解析的時候發生了異常。
於是我又信誓旦旦的去檢查他本地模擬的json數據,我們都知道json是由老道在js對象語法格式上發明而來的,其比js的對象格式更加嚴謹,單雙引號搞錯都不行,而且json也就那么幾種固定的返回格式,直接{}對象形式,還有一種對象數組形式[{},{}],還有一種對象中的數組{"",[]}額,我記得是一共就這三種情況,曉得這些基礎知識以后嚴格排查,發現格式一切正常,額。。見鬼。。。。。
那看下返回內容吧,如圖2所示,一個json數組一個抬頭信息。乍一看貌似沒什么問題,但是問題就在這,上文已經說到json格式是從js對象格式中改變而來,在js中注釋有很多種寫法,但是json在發明之初就是不提倡注釋的,所以抬頭信息在解析的時候就會被認定為錯誤信息。深坑啊。。。。。
總結
於是乎我就去尋找這個抬頭的來源,我問他你最近用什么編輯器了沒?他說就sublime,我起初懷疑是編輯器自動加的落款,后來發現不是,於是我看了下他的請求文件,是一個php文件,打開這個php文件,發現這個php文件剛開頭就對客戶端寫回了一段說明文本。正好就是圖2那段抬頭說明性文本,刪除這段文本,了事。。。
1.要善於使用jquery的error函數
2.注重基礎知識,注意事物出現的歷史原因如json是為傳遞而產生,所以其沒有注釋也是有意而為之。
3.json格式是死的必須嚴格遵守,json中若要添加注釋也要使用"k": "v"的形式,不過這會使得傳輸信息量大