2012-06-03 78 views
2

我試圖構建一個應用程序,使用JSON生成使用PHP,然後使用JavaScript進行管理。JSON參數提取

目前它沒有按預期工作,我不知道爲什麼。

代碼片段:

$(document).ready(function(){ 

     var projects = <?= $json; ?>; 
     $(window).bind('hashchange', function(){ 

     var potential = window.location.hash.substring(1); 

     $.each(projects, function(i,project){ 

      if (project.permalink == potential) 
      { 
       alert(project.title); 
       $('#title').text(project.title); 
       $('#agency').text(project.agency); 
      } 
      else 
      { 
       alert('potential: ' + potential + '. project.permalink: ' + project.permalink); 
      } 
     }); 
     }); 
    }); 

因此改變URL的哈希部分後,我檢查,看看是否永久在JSON塊我列出。 (固定鏈接值)。警報說project.permalink未定義。

PHP變量$ json是使用PHP數組和json_encode()函數創建的。

的JSON是在這裏:

var projects = [{"hand-made-cards":{"id":"3","title":"Hand Made Cards","type":"","description":"","website_url":"http:\/\/northumberlhand-made.co.uk","agency":"-","permalink":"hand-made-cards","position":"1","added_by":"1","updated_by":"1","deleted_by":"0","published":"1","deleted":"0","datetime_added":"2012-06-03 16:42:14","datetime_updated":"2012-06-03 17:44:37","datetime_deleted":"0000-00-00 00:00:00","rel_id":"13"}},{"olive-design":{"id":"2","title":"Olive Design","type":"","description":"Olive Design website description. What happened here?","website_url":"http:\/\/olive-design.co.uk","agency":"Gardiner Richardson","permalink":"olive-design","position":"2","added_by":"1","updated_by":"1","deleted_by":"0","published":"1","deleted":"0","datetime_added":"2012-06-03 16:41:31","datetime_updated":"2012-06-03 17:43:50","datetime_deleted":"0000-00-00 00:00:00","rel_id":"14"}},{"riba-microsite":{"id":"1","title":"RIBA Microsite","type":"","description":"Some info abou the RIBA MS.","website_url":"http:\/\/ram.grtest.com","agency":"Gardiner Richardson","permalink":"riba-microsite","position":"3","added_by":"1","updated_by":"1","deleted_by":"0","published":"1","deleted":"0","datetime_added":"2012-06-03 16:40:55","datetime_updated":"2012-06-03 17:43:29","datetime_deleted":"0000-00-00 00:00:00","rel_id":"15"}}]; 

更新JSON是在這裏,因爲建議我已刪除的附加對象包裹每個對象:按實例JSON

var projects = [[{"id":"3","title":"Hand Made Cards","type":"","description":"","website_url":"http:\/\/northumberlhand-made.co.uk","agency":"-","permalink":"hand-made-cards","position":"1","added_by":"1","updated_by":"1","deleted_by":"0","published":"1","deleted":"0","datetime_added":"2012-06-03 16:42:14","datetime_updated":"2012-06-03 17:44:37","datetime_deleted":"0000-00-00 00:00:00","rel_id":"13"}],[{"id":"2","title":"Olive Design","type":"","description":"Olive Design website description. What happened here?","website_url":"http:\/\/olive-design.co.uk","agency":"Gardiner Richardson","permalink":"olive-design","position":"2","added_by":"1","updated_by":"1","deleted_by":"0","published":"1","deleted":"0","datetime_added":"2012-06-03 16:41:31","datetime_updated":"2012-06-03 17:43:50","datetime_deleted":"0000-00-00 00:00:00","rel_id":"14"}],[{"id":"1","title":"RIBA Microsite","type":"","description":"Some info abou the RIBA MS.","website_url":"http:\/\/ram.grtest.com","agency":"Gardiner Richardson","permalink":"riba-microsite","position":"3","added_by":"1","updated_by":"1","deleted_by":"0","published":"1","deleted":"0","datetime_added":"2012-06-03 16:40:55","datetime_updated":"2012-06-03 17:43:29","datetime_deleted":"0000-00-00 00:00:00","rel_id":"15"}]]; 
+0

您不會在發佈的代碼中的任何位置引用'project.potential'。 – lanzz

+0

對不起,錯字。應該(現在確實)讀取'project.permalink' – Alex

+3

'projects'不是JSON,它是一個JavaScript數組。你的問題與JSON無關。 PHP可能已經產生了JSON,但是你的問題似乎並沒有與作爲數據交換格式的JSON相關。 –

回答

2

實際上,你在你的JSON額外的水平並沒有太大的意義:每個項目被封閉在一個額外的對象(重新縮進的JSON的清晰度):

[ 
    { 
     "hand-made-cards": { 
      "id":"3", 
      "title":"Hand Made Cards", 
      "type":"", 
      "description":"", 
      "website_url":"http:\/\/northumberlhand-made.co.uk", 
      "agency":"-", 
      "permalink":"hand-made-cards", 
      "position":"1", 
      "added_by":"1", 
      "updated_by":"1", 
      "deleted_by":"0", 
      "published":"1", 
      "deleted":"0", 
      "datetime_added":"2012-06-03 16:42:14", 
      "datetime_updated":"2012-06-03 17:44:37", 
      "datetime_deleted":"0000-00-00 00:00:00", 
      "rel_id":"13" 
     } 
    }, 

    { 
     "olive-design": { 
      "id":"2", 
      "title":"Olive Design", 
      "type":"", 
      "description":"Olive Design website description. What happened here?", 
      "website_url":"http:\/\/olive-design.co.uk", 
      "agency":"Gardiner Richardson", 
      "permalink":"olive-design", 
      "position":"2", 
      "added_by":"1", 
      "updated_by":"1", 
      "deleted_by":"0", 
      "published":"1", 
      "deleted":"0", 
      "datetime_added":"2012-06-03 16:41:31", 
      "datetime_updated":"2012-06-03 17:43:50", 
      "datetime_deleted":"0000-00-00 00:00:00", 
      "rel_id":"14" 
     } 
    }, 
    ... (snip) ... 

我的猜測是你」已經在您的PHP代碼中錯誤地生成了JSON,並且需要將其更改爲在JSON數組的頂層生成每個項目,而不是包裝在其他對象中。

+0

我現在已經做到了這一點(有問題的JSON更新)。我仍然得到相同的結果。 (輸出:潛力:olive-design。project.permalink:undefined 潛力:olive-design。project.permalink:undefined 潛力:olive-design。project.permalink:undefined) – Alex

+0

看起來你現在有一個數組嵌入數組,這仍然是錯誤的。 –

+0

你的輸出應該像這樣開始:'{「hand-made-cards」:{「id」:「3」,「title」:「Hand Made Cards」,...' – lanzz

0

:項目[0] [「hand-made-cars」]。永久鏈接被定義,但是當你在項目中完成每個項目時,然後你「循環」數組(在我的例子中是0),你可能想要循環項目[0],或者修復json似乎更好,並且不要添加哈希數組,所以它看起來像:

projects = {"hand-made-cars":{...}, "other-cars": {...}} 

此外,如果你的$ JSON是json_encode的輸出,然後看看http://php.net/manual/en/function.json-encode.php,你會看到有一個第二個參數。您可能想要使用JSON_FORCE_OBJECT。

1

看看你的JSON數據。你有對象的列表...

[{"hand-made-cards":{key:val,...}}, 
{"olive-design":{key:val,...}}]; 

你真的想要的{key:val,...}作爲列表projects的成員。目前,您有一個對象列表,其中每個對象都有一個鍵:值對。你可以通過做project.hand-made-cards.permalinkproject.olive-design.permalink來引用正確的值,但這可能不是你想要做的。