未定义的变量在document.write中

时间:2014-12-06 01:09:29

标签: javascript json

我一直在Chrome控制台中收到“toggleOnlyRelatedPosts未定义”且脚本不起作用。我正在研究这个脚本,并且在添加了这么多变量之后我已经迷失了。我对这种事情并不擅长,对我来说它看起来很明确,但我猜它不是。 Chrome会在document.write

标记错误

这是脚本:

<script type="text/javascript">
    //<![CDATA[
    function postGrabber(json) {

            // The Magic
            for (var i = 0; i < json.feed.entry.length; i++) {
                for (var j = 0; j < json.feed.entry[i].link.length; j++) {
                    if (json.feed.entry[i].link[j].rel == 'alternate') {
                        var postUrl = json.feed.entry[i].link[j].href;
                        break;
                    }
                }

            // Thumbnail Stuff
            var orgImgUrl = json.feed.entry[i].media$thumbnail.url ? json.feed.entry[i].media$thumbnail.url : 'http://1.bp.blogspot.com/-mxinHrJWpBo/VD6fqbvI74I/AAAAAAAAcn8/LslulDeOROg/s72-c/noimage-chalkboard.jpg';
            var newImgUrl = orgImgUrl.replace('s72-c', 's' + imgSize + '-c');
            var imgTag = '<a class="item-link-post" href="' + postUrl + '"><img class="item-img-thumbnail" src="' + newImgUrl + '" width="' + imgSize + '" height="' + imgSize + '"/></a>';

            var authorName = json.feed.entry[i].author[0].name.$t;
            var authorURL = json.feed.entry[i].author[0].uri.$t;
            var authorOriImgUrl = json.feed.entry[i].author[0].gd$image.src;
            var authorNewImgUrl = authorOriImgUrl.replace('s512-c', 's' + authorImgSize + '-c');
            var authorImgTag = '<a class="item-link-author" href="' + authorURL + '" target="_blank" rel="nofollow"><img class="item-img-author" src="' + authorNewImgUrl + '" alt="' + authorName + '"/></a>';

            var postLabel = json.feed.category[i].term;
            var postLabelUrl = '/-/' + postLabel + '';

            // Standard Stuff
            var postTitle = json.feed.entry[i].title.$t;
            var postCommentCount = json.feed.entry[i].thr$total.$t;

            var postSummary = json.feed.entry[i].summary.$t;
            var entryShort = postSummary.substring(0, '' + summaryLength + '');
            var entryEnd = entryShort.lastIndexOf(" ");
            var postContent = entryShort.substring(0, entryEnd) + '...';

            var postDate = json.feed.entry[i].updated.$t ? json.feed.entry[i].updated.$t : json.feed.entry[i].published.$t;
            var shortDate = postDate.substring(0,10);

            // Let's Make Options Here
            var toggleImg = showImg ? '' + imgTag + '' : '';
            var toggleTitle = showTitle ? '<h1 class="item-title">' + postTitle + '</h1>' : '';
            var toggleSummary = showSummary ? '<p class="item-snippet">' + postContent + '</p>' : '';
            var toggleDate = showDate ? '<span class="item-date">' + shortDate + '</span>' : '';
            var toggleAuthorImg = showAuthorImg ? '' + authorImgTag + '' : '';
            var toggleCommentCount = showCommentCount ? '<span class="item-comment-count">' + postCommentCount + '</span>' : '';


            var toggleOnlyRelatedPosts = showOnlyRelatedPosts ? '' + postLabelUrl + '' : '';

            // The Output
            var itemPost = '<div class="item-post"><div class="item-imgs">' + toggleImg + toggleAuthorImg + '</div>' + toggleCommentCount + '<a class="item-link" href=' + postUrl + '>' + toggleTitle + '</a>' + toggleSummary + toggleDate + '</div>';

            // Let's Write It Down
            document.write(itemPost);
        }
    }
    //]]>
</script>
<script type="text/javascript">
    //<![CDATA[
    var imgSize = 96;
    var summaryLength = 142;
    var authorImgSize = 36;
    var showImg = true; 
    var showTitle = true; 
    var showSummary = true; 
    var showDate = true;
    var showAuthorImg = true;
    var showCommentCount = true;
    var showOnlyRelatedPosts = true;
    document.write('<script type="text/javascript" src="/feeds/posts/summary' + toggleOnlyRelatedPosts + '?orderby=published&amp;max-results=5&amp;alt=json-in-script&amp;callback=postGrabber"><\/script>');
    //]]>
</script>

1 个答案:

答案 0 :(得分:1)

变量toggleOnlyRelatedPosts在函数postGrabber的范围内声明。因此,在您尝试使用document.write的行中确实未定义。

如果你想在函数之外使用那些变量,你必须在函数之外声明它们。

Read up on the concept of 'scope',它在任何编程语言中都是非常基础的知识。