2011-02-27 62 views
6

我不知道爲什麼,但是在進行ajax調用時遇到了與$.parseJSON相關的問題,我需要檢查響應是否包含JSON,然後繼續用$.parseJSON解析它,如果它不包含任何JSON,那麼它將打印出一個元素中的響應(響應將包含一些HTML)。

然後我測試了eval是否會做任何事情,當然這樣做了,但我不想爲此使用eval

的代碼我有:

$.ajax({ 
    url: 'ajax.php', 
    success: function(response) 
    { 
     var msg = $.parseJSON(response); 

      //alert(typeof(response)); <-- returns 'string' 

      //alert(typeof(msg)); <-- returns 'object' 

      //alert(msg.error); <-- this doesn't work at all. 

      //eval(response) <-- returns [object Object] 

     if(msg.error !== '') 
     { 
      ajaxWindow.html(msg.error); 
     } 
     else 
     { 
      ajaxWindow.html(response).hide().slideDown('slow'); 
     } 
    } 
}); 

那麼怎麼來它無法解析JSON字符串? jQuery.parseJSON清楚地表示:

注意到合式JSON 並返回生成的JavaScript對象。

但是什麼都不能被解析,這是一種錯誤還是一個錯誤?

編輯:的JSON:

[{"error":"Error loading template"}] 
+0

我以前有過一些奇怪的問題,這在我的情況下工作 msg = jQuery.parseJSON(response); – Peter 2011-02-27 01:35:25

+0

您確定ajax.php與請求的URL位於同一個目錄嗎? – 2011-02-27 01:35:47

+0

請發佈您試圖解析的JSON。當你嘗試'alert(msg)'時,你會得到什麼? 'typeof'爲許多不同類型提供''object''。 – user113716 2011-02-27 01:36:02

回答

7

你有一個數組,所以你需要通過第一個索引來訪問它。

相反的:

alert(msg.error); 

做:

alert(msg[0].error); 
+2

!!!!!!!!!!!! +1 – karim79 2011-02-27 01:42:12

+0

啊,是的,現在我已經注意到你的答案發布後,'[{}]' - 數組對象,'{}' - 對象。 jQuery API文檔應該包含在文檔中! :P – MacMac 2011-02-27 01:43:17

+0

我試圖解析'{「結果」:「成功」,「味精」:「成功」}在JavaScript中,但我得到的價值是'undefined'當我打印'data.result'任何解決方案? ? – 2013-08-24 08:14:19

1

使用.post的$如果可能的話。它將Content-Type自動設置爲HTML。