JSON正在我的JavaScript中进行全局修改......为什么?

时间:2010-12-01 23:47:10

标签: javascript jquery json templates function

下面是我使用官方jQuery模板插件的一些函数,并插入一些JSON,我的后端开发人员正在var s topPageslatestPages中提供给我,但出于某种原因,我调用insertOrHideList()函数,然后出于某种原因调用它正在承载renderList()属性的正常max函数。因此,而不是获得100结果(请参阅renderList()的第2行即时5查看底部的insertOrHideList()来电)

有什么想法吗?

       function renderList(json,max){
            if(!max){max=100}
            tempjson = json;
            tempjson.length = max;
            the_template = $.template(null, '<li><a href="{{if CONTENT_ID}}article/${CONTENT_ID}{{else}}${CATEGORY_TREE_ID}{{/if}}" title="Go to the ${TITLE} page">${TITLE}</a></li>');
            return $.tmpl(the_template,tempjson);
        }

        function insertOrHideList(selector,json,max){
            if(!max){max=5}
            if(typeof json !== 'undefined' && json.length >= 5){
                $(selector).append(renderList(json,max));
            }
            else{
                $(selector).parent().remove();
            }
        }
        insertOrHideList('.most-popular ol',topPages,5);
        insertOrHideList('.recently-added ol',latestPages,5);

        console.log(renderList(latestPages));

3 个答案:

答案 0 :(得分:3)

执行此操作时:

tempjson = json;

全局tempjson数组设置为与jsonlatestPages)相同的引用,因此您对其进行的更改将与原始数据进行更改。要获得一个新的数组,你需要制作一个副本,如下所示:

var tempjson = json.slice(0);

注意var的添加,这样我们就不会创建一个全局变量(这里是一个单独的问题)。

答案 1 :(得分:1)

看起来你正在通过这条线:

$(selector).append(renderList(json,max));
从调用insertOrHideList开始,它将是5。你真的在追求:

$(selector).append(renderList(json,json.length));

答案 2 :(得分:0)

if(typeof json !== 'undefined' && json.length >= 5){
  $(selector).append(renderList(json,max));
}

应该是:

if(typeof json !== 'undefined' && json.length >= max){
  $(selector).append(renderList(json,json.length));
}