2012-03-09 8 views
0
{"0": 
    {"id":"276","course":"92","name":"Tutorial - Compound Measures", 
    "activitylink":"2490","available":"1331231400","deadline":"1331235000"}, 
"1": 
    "[email protected]","reference":"[email protected]"} 

これはjQuery/Javascriptでアクセスしようとしていますが、できません。これは私のjQueryです:JavascriptでこのJSONデータにアクセスするにはどうすればよいですか?

$('#lessonSelect').live('change', function() 
{ 
    $.getJSON('?ajax=true&lid='+$('#lessonSelect').val(), function(data) 
    {  
     var len = data.length;  
     var lessonDialog = "";//initialise 
     var launchLessonDiv = '<a href="' + data.reference + '">Launch Lesson</a>'; 

     for (var i = 0; i< len; i++) 
     { 
      lessonDialog += '<p>' + data[i].name + '</p>'; //get lesson name 
     } 

     $('#lessonDialog').html(lessonDialog); //insert lesson name into dialog 
     $('#launchLessonDiv').html(launchLessonDiv); 

    }); 
}); 

これは基本的に選択リストです。ユーザーが何かを選択するたびに、ページ上のリンクや他のものが変わります。ものは、ページが最初に読み込まれたときに動作しますが、選択リストでstuffを選択し始めたらlessonDialogは何も入っていない空白になります。

+0

あなたはJSONのソース形式を変更できますか? ...それが問題を簡略化するならば...構造は#1と#2の間で一貫していません – charlietfl

+0

どういう意味ですか、それをどうやってやりますか?私はJSONにはあまりよくありません。実際、JSONを初めて使用したのは昨日でした。 – user1219572

+0

はすっきりしています。それ以降はどうすればアクセスできますか? – charlietfl

答えて

2

は真の配列に数字キーを持つオブジェクトを変換します

$.getJSON('?ajax=true&lid='+$('#lessonSelect').val(), function(data) { 
    data = Array.prototype.slice.call(data); 

あなたの現在の方法は、失敗したため、オブジェクトの作成で{ ... }結果、ない配列。オブジェクトのプロパティlengthundefinedあるので、ループが開始されることはありません飽きないでしょう:

for (var i=0; i<undefined; i++) ; // <-- 0 < undefined is always false 
+0

で作成している純粋な配列 '[{" name ":" foo "}、{" name ":" bar "}]' ..後者のコードでは、 – user1219572

+0

@ user1219572同じように。オブジェクトを配列に変換した後、 'data'は真の配列であり、配列のプロパティとメソッドを使うことができます。 –

+0

data = Array.prototype.slice.call(data)の後に警告(データ)を試みましたが、何も警告しません。/ – user1219572

関連する問題