2011-08-29 27 views
4

我有這樣的代碼:爲什麼警告(json [0] .subject);給未定義?

<script> 
    $(document).ready(function() 
    { 
     refresh(); 
    }); 

    function refresh() 
    {  
     $.get('getMessageDetails.php', function (json) { 
      alert(json); 
      alert(json[0].subject); 
     },"json"); 
     window.setTimeout(refresh,30000); 
    } 
</script> 

然後我有getMessageDetails.php:

<?php 
//header('Content-Type: application/json; charset=utf-8'); 
include('header_application.php'); 
$lastNewMessageCnt = $obj_clean->getUnopenedMessagesCount($_SESSION['user_id']) + 1; 
$last_unopened_message_row = $obj_clean->getLastUnopenedMessage($_SESSION['user_id'],$lastNewMessageCnt); 
echo json_encode($last_unopened_message_row); 
?> 

然後我有警報(JSON)表示:這是正確的

[{"subject":"Freechat ddd","id":"19","created_at":"2011-08-29 14:58:27","unique_code":"ALLEYCA000RC","opened_once":"0"}] 

alert(json[0].subject);給出undefined ???

請幫忙? 謝謝

+1

爲什麼不使用$ .getJSON():http://api.jquery.com/jQuery.getJSON/? – m90

+0

我對所有這些都很陌生,對於如何做到這一點毫無頭緒。通過你給我的鏈接,但waaaay複雜...不知道從哪裏開始改變我所有的代碼使用getJSON合併。 IM調用文件是一個.php,因爲我需要從數據庫表中獲取值...僅供參考:本網站是一個移動網站,雖然 –

+0

但它確實工作:http://jsfiddle.net/majidf/CM7Tm/ –

回答

0

如果你的第一個警報顯示你說什麼是的話,那麼你的json變量的內容沒有被視爲JSON - 如果它是你會看到[object Object]的警報。檢查here。所以你需要指定什麼是返回的是json(你這樣做);但你也應該確保PHP發送正確的響應頭文件。添加下面的第一行,你送輸出之前:

header('Content-type: application/json'); 
echo json_encode($last_unopened_message_row); 
+0

我複製並粘貼了警報中的內容..我註釋掉了標題行,只是爲了檢查...我已經把它放回警報現在給[]? –

+0

所以,我錯了 - 即使是正確的頭文件也不能強制正確的類型轉換。在這種情況下,按照@Rocket的建議,或者至少按照Pavan Agarwal的說法做。 –

+0

看起來好像當你嘗試發送正確的(json)頭,根本沒有輸出,這可能是錯誤報告關閉和某處發生致命錯誤的組合。因此,要麼調查是什麼原因導致了「死亡白屏」,要麼是作爲(壞)解決方法而忘了發送正確的頭文件,然後將輸出文件作爲文本客戶端發送,然而,用'json = $ .parseJSON解析json json);正如@Pavan Agarwal所建議的那樣。 –

1

你要轉換的json變量糾正JSON格式變量。

目前它是一個字符串變量。

你必須使用它下面的方式:

<script> 
    $(document).ready(function() 
    { 
     refresh(); 
    }); 

    function refresh() 
    {  
     $.get('getMessageDetails.php', function (json) { 
      alert(json); // this is a string variable. 
      json = $.parseJSON(json); //now json varible is in correct json format. 
      alert(json.subject); //you can call it dirctly like a associative array. No need to include '[0]'. 
     },"json"); 
     window.setTimeout(refresh,30000); 
    } 
</script> 
+0

如果你要使用'parseJSON',你不需要在'get'結尾處的',「json」'。 –

1

看來你JSON是沒有得到正確的解析。請嘗試使用getJSON

$.getJSON('getMessageDetails.php', function (json) { 
    alert(json); 
    alert(json[0].subject); 
}); 
+0

警報顯示沒有任何:)在螢火蟲響應選項卡只顯示[] –

+0

+1最自然的解決方案。要使用json,請使用'getJSON'。 –