Jquery ajax方法解析返回的json數據

最近在用jquery的ajax方法傳遞接收json數據時發現一個問題,那就是返回的data數據,有時候可以直接作爲json數據使用,可有時候又不行。 

經過網友指出,這個問題已經有了比較明確的結論,那就是jquery ajax方法的complete方法是不會處理dataType的,所以如果你是在complete裏面試圖直接用json數據是不可行的,必須先通過eval。 

以下是我原來的文章,大家僅作個參考,已經沒有太大價值了。 

$.ajax方法如下: 

Java代碼  收藏代碼
  1. $.ajax({   
  2. type: "POST",  
  3. url:  ctxRoot+'FolderAction!saveInformSetting.action',  
  4. data: 'jsonStr=' + inform_settingListStr,  
  5. dataType: "json",  
  6. complete: function(data){  
  7.     //在這裏做些事情,假設返回的json數據裏有name這個屬性  
  8.     //有時候可以直接data.name或者data['name']去訪問  
  9.     //但有時候,卻要通過var jsonData = eval("("+data.responseText+")");纔可以通過jsonData.name訪問,而且這種情況下,需要是complete而不是success  
  10. }  
  11. });   



ok, 問題已經在代碼的註釋裏面說明了,下面說下造成這兩種不同的原因。 

先說明第一種情況: 

    我發現能夠直接 data.屬性名訪問的情況,服務器端代碼一定是直接renturn的一個常量字符串。 
    什麼是常量字符串呢,有些人可能不太清楚,常量字符串就是指直接用“”組成的字符串,沒有定義String 變量直接把一串“”print到前臺的情況,就可以直接data.屬性名訪問,而且jquery端只要寫success就可以拿到。 

下面是造成要eval並且不能進入success的原因: 

     這種情況是因爲服務器端向外print的時候是一個String對象,通常此類問題在我的代碼裏是因爲後臺json比較複雜,在組織的時候我用到了StringBuffer,然後最後print的時候print的是StringBuffer對象的toString,所以就相當於print了一個String對象 

     這種情況下jquery的ajax方法就不會進入success方法,只能用complete接收,並且想要解析data裏的json數據的話,必須對data.responseText進行eval 


    除此兩點,還有需要注意的是,如果你使用的是jq1.4,那麼他對json的格式有着更嚴格的要求,所有的key和屬性都要用雙引號標註起來,雖然key不用雙引號原生的js是允許的,但是jq1.4似乎有這個要求。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章