2

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 はここにあります。

  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"}]];
4

3 に答える 3

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) ...

私の推測では、JSON が PHP コードで正しく生成されておらず、追加のオブジェクトでラップするのではなく、JSON 配列のトップレベルで各プロジェクトを生成するように変更する必要があります。

于 2012-06-03T20:20:27.680 に答える
1

JSON データを見てみましょう。オブジェクトのリストがあります...

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

{key:val,...}リストのメンバーとして本当に必要ですprojects。現在、各オブジェクトが1つのキーと値のペアを持つオブジェクトのリストがあります。project.hand-made-cards.permalinkorを実行することで正しい値を参照できますproject.olive-design.permalinkが、それはおそらくやりたいことではありません。

于 2012-06-03T20:22:10.440 に答える
0

あなたの例のjsonによると:projects [0] [ "hand-made-cars"].permalinkが定義されていますが、プロジェクトでそれぞれを実行すると、配列を「ループ」します(私の例では0があります) )、おそらくプロジェクト[0]、またはjsonを修正する方が良いと思われるものをループしたいので、ハッシュの周りに配列を追加しないでください:

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

また、$json が json_encode の出力である場合は、http://php.net/manual/en/function.json-encode.phpを参照すると、2 番目のパラメーターがあることがわかります。JSON_FORCE_OBJECT を使用することもできます。

于 2012-06-03T20:18:13.967 に答える