2009-10-02 2 views
4

Я есть эта функция JQueryАнализировать JSON массив с JQuery .each()

function getData(jsonLink){ 
    $(".scrollable .items").html("<img class='loadGif' src='/sites/all/themes/zen/journeyon/images/ajax-loader.gif' alt='' />"); 

    $.ajaxSetup({ 
    url: jsonLink, 
    global: false, 
    type: "GET" 
    }); 

    $.ajax({ 
    url: jsonLink, 
    success: function(data) { 
     var output = ""; 
     $.each(data['nodes'], function(i,row){ 
     var linkType = row['node-type']; 
     var lowerLinkType = linkType.toLowerCase(); 
     var videoLink = row["video"]; 
     var thumbLink = row["thumbnail"]; 
     var posterLink = row["poster-image"]; 
     var nodeTitle = row["node-title"]; 
     var url = row['url-link']; 
     if(linkType == "Episode"){ 
      output+='<li><a class="myRemote '+lowerLinkType+'" href="'+posterLink+'" ref="'+videoLink+'" title="Play '+nodeTitle+'"><img src="'+thumbLink+'" width="123" height="67" alt="Play '+nodeTitle+'" /></a></li>'; 
     }else if(linkType == "Slide"){ 
      output+='<li><a class="myRemote '+lowerLinkType+'" href="'+posterLink+'" ref="'+url+'" title="Go To '+nodeTitle+'"><img src="'+thumbLink+'" width="123" height="67" alt="Go To '+nodeTitle+'" /></a></li>'; 
     } 
     }); 
     $(".scrollable .items").html("").append(output); 
     remoteControl(); 
    } 
    }); 
} 

И я пытаюсь разобрать этот массив

{ 
    "nodes": [ 
     { 
      "node-title" : "Slide for Album Post", 
      "node-type" : "Slide", 
      "poster-image" : "http://journeyon.local/sites/default/files/imagecache/ticker_image/files/poster-images/Web_Graphic2.jpg", 
      "thumbnail" : "http://journeyon.local/sites/default/files/imagecache/ticker_thumbnail/files/poster-images/Web_Graphic2.jpg", 
      "video" : "", 
      "audio" : "", 
      "url-link" : "http://dev.journeystl.info/current/blogs/josh-dix/latest-worship-ep-have-thine-own-way" 
     }, 
     { 
      "node-title" : "Walking In The Light", 
      "node-type" : "Episode", 
      "poster-image" : "http://journeyon.local/sites/default/files/imagecache/ticker_image/files/poster-images/Sermon_2009-09-27pf.jpg", 
      "thumbnail" : "http://journeyon.local/sites/default/files/imagecache/ticker_thumbnail/files/poster-images/Sermon_2009-09-27pf.jpg", 
      "video" : "http://journeyon.local/sites/default/files/video/vodcast/Sermon_2009-09-27-Vodcast.m4v", 
      "audio" : "http://journeyon.local/sites/default/files/audio/Sermon_2009-09-27-Podcast.mp3", 
      "url-link" : "" 
     }, 
     { 
      "node-title" : "Test Slide", 
      "node-type" : "Slide", 
      "poster-image" : "http://journeyon.local/sites/default/files/imagecache/ticker_image/files/poster-images/iStock_000000041926Small.jpg", 
      "thumbnail" : "http://journeyon.local/sites/default/files/imagecache/ticker_thumbnail/files/poster-images/iStock_000000041926Small.jpg", 
      "video" : "", 
      "audio" : "", 
      "url-link" : "/node/3960" 
     }, 
     { 
      "node-title" : "Finding God at Church", 
      "node-type" : "Episode", 
      "poster-image" : "http://journeyon.local/sites/default/files/imagecache/ticker_image/files/poster-images/Sermon_2009-09-06pf_0.jpg", 
      "thumbnail" : "http://journeyon.local/sites/default/files/imagecache/ticker_thumbnail/files/poster-images/Sermon_2009-09-06pf_0.jpg", 
      "video" : "http://journeyon.local/sites/default/files/video/vodcast/Sermon_2009-09-05-Vodcast.m4v", 
      "audio" : "http://journeyon.local/sites/default/files/audio/Sermon_2009-09-06-Podcast.mp3", 
      "url-link" : "" 
     }, 
     { 
      "node-title" : "Finding God in Brokenness", 
      "node-type" : "Episode", 
      "poster-image" : "http://journeyon.local/sites/default/files/imagecache/ticker_image/files/poster-images/Sermon_2009-08-30pf_0.jpg", 
      "thumbnail" : "http://journeyon.local/sites/default/files/imagecache/ticker_thumbnail/files/poster-images/Sermon_2009-08-30pf_0.jpg", 
      "video" : "http://journeyon.local/sites/default/files/video/vodcast/Sermon_2009-08-30-Vodcast.m4v", 
      "audio" : "http://journeyon.local/sites/default/files/audio/Sermon_2009-08-30-Podcast.mp3", 
      "url-link" : "" 
     }, 
     { 
      "node-title" : "False Teachers", 
      "node-type" : "Episode", 
      "poster-image" : "http://journeyon.local/sites/default/files/imagecache/ticker_image/files/poster-images/Sermon_2009-07-26pf.jpg", 
      "thumbnail" : "http://journeyon.local/sites/default/files/imagecache/ticker_thumbnail/files/poster-images/Sermon_2009-07-26pf.jpg", 
      "video" : "http://journeyon.local/sites/default/files/video/vodcast/Sermon_2009-07-25-Vodcast.m4v", 
      "audio" : "http://journeyon.local/sites/default/files/audio/Sermon_2009-07-25_Podcast.mp3", 
      "url-link" : "" 
     }, 
     { 
      "node-title" : "Confessions: A Story of Struggle, Restoration, and Hope", 
      "node-type" : "Episode", 
      "poster-image" : "http://journeyon.local/sites/default/files/imagecache/ticker_image/files/poster-images/PosterFrame_Confessions.jpg", 
      "thumbnail" : "http://journeyon.local/sites/default/files/imagecache/ticker_thumbnail/files/poster-images/PosterFrame_Confessions.jpg", 
      "video" : "http://journeyon.local/sites/default/files/video/vodcast/Sermon_2009-06-28-Vodcast.m4v", 
      "audio" : "http://journeyon.local/sites/default/files/audio/Sermon_2009-06-28-Podcast.mp3", 
      "url-link" : "" 
     } 
    ] 
} 

Проблема в том, я получаю сообщение об ошибке на JQuery .js.

G is undefined 
http://journeyon.local/sites/all/themes/zen/journeyon/js/jquery-1.3.2.min.js?4 
Line 12 

Кто-нибудь знает, что происходит? , если я предупреждаю перед оператором .each(), он предупреждает о прекращении, но если я предупреждаю внутри оператора .each(), я ничего не получаю, и переменные никогда не создаются.

Спасибо!

ответ

3

Вы делаете это с трудом, используя $.ajax(). Вместо этого проще использовать $.getJSON().

+0

Смешной вы говорите, что, потому что IE6 не нравится .getJSON вообще, по крайней мере, с .ajax называют IE6 предупреждает об успехе. IE6 никогда не ударил «успех» с помощью .getJSON. Я сражался с этим в течение 8-10 часов, прежде чем переключиться на .ajax и получить предупреждение о достижении сразу ... теперь он просто не будет создавать элементы списка. – 2009-10-02 03:35:47

+1

jQuery отлично справляется с изоляцией вас от различий в браузерах, но это не спасет вас от вас, если вы напишете код, который будет основываться на деталях реализации браузера. Только для одного примера: [1, 2, 3,]. Длина равна 3 во всех браузерах, но IE, где она равна 4, последний элемент является «неопределенным». Я хочу сказать, что вы, вероятно, делаете что-то неправильно, если $ .getJSON() не работает. Я бы запускал вашу программу под Firebug на Firefox и F12 на IE8. Один из них, вероятно, укажет на ошибку в вашем коде, которая при фиксированном разрешении позволит запустить код на IE6. –

+0

Ну, ты крутил мою руку, чтобы вернуться к getJSON, и это сработало! Я должен был попробовать это снова! Моя первоначальная проблема - неправильный массив JSON, который Safari и Firefox были немного более прощающими, чем IE ... после проверки этого массива я должен был снова попробовать getJSON ... – 2009-10-02 03:58:30

6
$.ajax({ 
url: jsonLink, 
dataType: 'json', 
success: function(data) { 
    $.each(data.items, function(i,item){ 
    // your code .. 
    }); 
} 
}); 
0

Просто используйте row.node-type, row.video и т.д., вместо того, чтобы использовать row['node-type'], row["video"] и т.д.

Надеются, что это поможет.

1

Для JSON PHP массива кодируются

<?php $arr= array('1'=>'2', 2=>'3',4000=>'400','x'=>'alfa'); ?> 

<input type="hidden" value="<?php echo json_econde($arr); ?>" id="phpjsonencoded"> 

вы можете использовать

var x = "[" + $('#phpjsonencoded').val() + "]"; 

var obj = $.parseJSON(x); 

$.each(obj[0],function(key,val){ 

console.log(val); 

});