2012-06-03 82 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来引用正确的值,但这可能不是你想要做的。