2010-01-13 13 views
1

我正在嘗試處理RSS源的json版本,但我需要訪問標有「data.channel.item」的數組。我懷疑,因爲這個名字似乎與javascript中的保留字項衝突,該腳本不適用於只有這個特定的json文件。它在其他情況下工作。json選擇一個名爲「item」的項目

有沒有辦法使用「物品」,但以某種方式逃脫它? (是的,我是一個JavaScript新手)

這裏是腳本(jQuery的)

<script> 
    $(document).ready(function(){ 
    $.getJSON("http://example.com/jsonBuzz.php?callback=?", 
     function(data){ 
      $.each(data.channel.item, function(i,item){ 
      $("#results").append('<li><h1>'+item.title+'</h1></li>'); 
      }); 
     }); 
    }); 

    </script> 

的JSON的刪節版:

{"@attributes":{"version":"2.0"},"channel":{"lastBuildDate":"Mon, 11 Jan 2010... ..."generator":"Blogger","item":[{"guid":"tag:blogger.com,... 
+1

您能否詳細說明「不起作用?」 – ShZ 2010-01-13 04:39:20

+0

是的,拋出的具體錯誤是什麼,它失敗的是哪一行? – 2010-01-13 09:46:21

+0

html頁面在#results節點中不顯示任何內容。再次,當我嘗試與其他飼料,它的作品。 至於什麼行失敗,我不知道任何工具來調試JavaScript。 (我說我是一個新手)我習慣於PHP,HTML,XML和CSS。 Javascript對我來說是新的。 我在「item」和「data.channel.item」以及帶和不帶引號的方括號內嘗試了雙引號。不用找了。 – gmdavisUX 2010-01-13 12:53:06

回答

7

把鑰匙放在雙引號將允許您使用保留字 - 實際上,它必須是有效的JSON(請參閱http://json.org/)。但是,這不是真正的問題,因爲「item」不是JavaScript中的保留字(請參閱https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Reserved_Words作爲一個可能的參考)。

你有item:title而不是item.titleitem["title"],這兩者都是訪問對象屬性的正確方法。

+0

好的,謝謝你的保留字列表。確實,項目不在其中。然而,我的代碼編輯器會加強這個詞,所以我認爲它必須有一些特別的東西。 我做了你建議的其他改變,仍然無法正常工作。就像我說的,我知道這個腳本可以在其他json上運行。 我正在編輯我的原始帖子來解決「:」錯字。 – gmdavisUX 2010-01-13 04:35:33

+0

您使用哪種代碼編輯器? 'item'通常是一個Collection對象的成員,但是這當然不會保留,也不應該由js代碼編輯器突出顯示該單詞。 – 2010-01-13 09:45:16

+0

我在使用Dreamweaver MX 2004時看到了這一點。 – gmdavisUX 2010-01-13 12:53:54

0

對於記錄:事實證明,問題不是與JavaScript代碼。在評論中受到了一個問題(Andy E)的啓發,我發現瞭如何捕獲javascript錯誤,並確定json沒有被恰當地包含在括號中或以「;」結尾。

這是一個PHP問題。 PHP有一個有用的功能json_encode,它將PHP對象轉換爲json。

但是,作爲json的新手,我認爲這已經準備好用於消費。我不知道它需要被包裹在一些額外的字符中。我修改了代碼,現在按計劃運行。

以下是其他人可能會覺得有用的PHP代碼。這是一個php文件,我通過jquery $ .getJSON檢索,如在我的第一篇文章中所示:

<?php 
header('Content-Type: text/javascript; charset=utf8'); 
header('Access-Control-Allow-Origin: http://www.example.com/'); 
header('Access-Control-Max-Age: 3628800'); 
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE'); 

$file='rss.xml'; 
$arr = simplexml_load_file($file);//this creates an object from the xml file 
$json= '('.json_encode($arr).');'; //must wrap in parens and end with semicolon 
print_r($_GET['callback'].$json); //callback is prepended for json-p 
?> 
相關問題