2015-11-28 5 views
0

Я пытаюсь выбрать контент из фида Google Blogger, который равен http://testdevchuli.blogspot.com/feeds/posts/default?redirect=false&orderby=published&alt=json-in-script&callback=exeRSSpostReader&max-results=500, используя код JavaScript по адресу http://testdevchuli.blogspot.com/, где вы можете увидеть ошибку через раздел «Элемент проверки», где существует только один красный предупреждающий сигнал, который ...(RSS-канал) Uncaught TypeError: Невозможно прочитать свойство «title» undefined

Uncaught TypeError: Cannot read property 'title' of undefined 
exeRSSpostReaderMain @ (index):1342 
exeRSSpostReader @ (index):1313 
(anonymous function) @ default?redirect=false&orderby=published&alt=json-in-script&callback=exeRSSpostReader&max-results=5…:2 

Так почему же это происходит ... ??? Вот мой полный код из верхней ссылки ...

<script> 
function exeRSSpostReader(json){ 
//<![CDATA[ 
//exeRSSpostReaderMain(json, DivisionId, Label, PostsVisible, ImageVisibility, SummaryVisibility, SummaryCharcters); 
//DivisionId: Id of the division in which the result should shown. 
//Label: Specific Label, Set &quot;&quot; for all posts. 
//PostsVisible: No of posts shown in final result. 
//ImageVisibility: Set true if you want thumbnails else set false. 
//SummaryVisibility: Set true if you want summary else set false. 
//SummaryCharcters: No of character shown in summary. 
exeRSSpostReaderMain(json, 'latest_post', '', 3, true, true, 150); 
exeRSSpostReaderMain(json, 'first_label', 'Dashain Song', 3, true, true, 150); 
exeRSSpostReaderMain(json, 'second_label', 'Modern Song', 6, true, true, 150); 
exeRSSpostReaderMain(json, 'third_label', 'Nepali Movie', 4, true, true, 150); 
exeRSSpostReaderMain(json, 'fourth_label', 'Nepali Movie', 4, true, true, 150); 
exeRSSpostReaderMain(json, 'fifth_label', 'Nepali Movie', 4, true, true, 150); 
exeRSSpostReaderMain(json, 'sixth_label', 'Nepali Movie', 5, true, true, 150); 
} 
//]]> 
</script> 
<script style='text/javascript'> 
//<![CDATA[ 
function exeRSSpostReaderMain(json, postArea, labelTxt, visiblePosts, imageVisible, summaryVisible, summaryChar) { 
    var noOfTotalPosts = 500; 
    var outputDiv = postArea; 
    var postLabel = labelTxt; 
    var numPosts = json.feed.openSearch$totalResults.$t; 
    var indexPosts = new Array(); 
    var pstChk = 0; 
    var resultStr = ''; 
    var resultStr = '<ul style="height:100%;background:#fff;">'; 
    for (var i = 0; i < numPosts; ++i) { 
     indexPosts[i] = i; 
    } 
    if (noOfTotalPosts > numPosts) { 
     noOfTotalPosts = numPosts; 
    } 
    for (i = 0; i < noOfTotalPosts; ++i) { 
     var entry = json.feed.entry[indexPosts[i]]; 
     var postTitle = entry.title.$t; 
     for (var k = 0; k < entry.link.length; k++) { 
      if (entry.link[k].rel == 'alternate') { 
       postURL = entry.link[k].href; 
       break; 
      } 
     } 
     if ("content" in entry) { 
      var postContent = entry.content.$t 
     } 
     s = postContent; 
     a = s.indexOf("<img"); 
     b = s.indexOf("src=\"", a); 
     c = s.indexOf("\"", b + 5); 
     d = s.substr(b + 5, c - b - 5); 
     if ((a != -1) && (b != -1) && (c != -1) && (d != "")) { 
      var imageUrl = d 
     } else var imageUrl = 'https://lh6.googleusercontent.com/-cXUE46Oenac/U6rONTOCYuI/AAAAAAAAQTw/r_WI91TMLpk/s400/Images_no_image.gif'; 
     var img = ''; 
     if (imageVisible == true) { 
     var img = '<a href="'+postURL+'"><img src="'+imageUrl+'" alt="' + postTitle + '" title="' + postTitle + '" /></a>'; 
     } 
     var labels = ''; 
     if (!entry.category){ 
      var noLabel = "No Label In This Post"; 
     } else { 
      for(var lblNo = 0; lblNo < entry.category.length; lblNo++){ 
       labels += entry.category[lblNo].term + ', '; 
      } 
     } 
     if (labels.search(postLabel) >= 0 && pstChk < visiblePosts){ 
     resultStr += '<li><div id="exe_post_container">' + img + '<h2 ><a href="'+postURL+'">' + postTitle + '</h2></a></h2><p>'; 
     var re = /<\S[^>]*>/g; 
     postContent = postContent.replace(re, ""); 
     if (summaryVisible == true) { 
      if (postContent.length < summaryChar) { 
       resultStr += postContent + '</p>'; 
      } else { 
       postContent = postContent.substring(0, summaryChar); 
       var quoteEnd_gal = postContent.lastIndexOf(" "); 
       postContent = postContent.substring(0, quoteEnd_gal); 
       resultStr += postContent + '...</p>'; 
      } 
     } 
     resultStr += '</div></li>'; 
     pstChk++; 
     } 
    } 
    resultStr += '</ul>'; 
    document.getElementById(outputDiv).innerHTML += resultStr; 
} 
function readMoreWidget() { 
var var1 = document.getElementsByTagName('footer')[0].innerHTML;var var2 = var1.search('href="http://www.exeideas.net" target="_blank">EXEIdeas');if (var2 == '-1'){alert('This Template Is Designed By EXEIdeas(www.exeideas.net)');} 
} 
window.onload = readMoreWidget; 
//]]> 
</script> 
<script src='http://testdevchuli.blogspot.com/feeds/posts/default?redirect=false&orderby=published&alt=json-in-script&callback=exeRSSpostReader&max-results=500'></script> 
+0

Возвращенный результат заключен в функции обратного вызова exeRSSpostReader(); поэтому вам нужно извлечь данные JSON здесь, то есть exeRSSpostReader (js) {return JSON_parse (js); } – jeff

+0

@jeff Я использую приведенный ниже код для получения заголовка. Это неправильно? 'var entry = json.feed.entry [indexPosts [i]];' 'var postTitle = entry.title. $ T;' –

ответ

0

Ошибка связана с запуском цикла получения сообщений больше, чем ваша ссылка на канал RSS. Например, если у вас есть 100 сообщений в вашем RSS-фиде, и вы запускаете цикл из 101, то во время выполнения итерации № 101 он будет через ошибку при попытке получить данные из нулевого пространства, поэтому постарайтесь уменьшить количество циклов.