Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript中推送json数组_Javascript_Jquery_Arrays_Push - Fatal编程技术网

在javascript中推送json数组

在javascript中推送json数组,javascript,jquery,arrays,push,Javascript,Jquery,Arrays,Push,我正在定制一些jQuery插件,但有一条错误消息我无法理解 var totHistory=0; var positions = new Array(); $('.someclass').each(function(index){ var tmp = $(this).val(); addHistory({id:tmp}); }); function addHistory(o

我正在定制一些
jQuery
插件,但有一条错误消息我无法理解

        var totHistory=0;
        var positions = new Array();
        $('.someclass').each(function(index){
           var tmp = $(this).val();
           addHistory({id:tmp});
        });

        function addHistory(obj)
        {
            /* Gets called on page load for each comment, and on comment submit */
            totHistory++;
            positions.push(obj.id);
        }
在通过
.someClass
的第一次迭代中,我得到了以下消息

Cannot call method 'push' of undefined 

有人能解释一下原因吗?

您应该将
positions
作为参数发送,或者在
addHistory
可访问的范围内声明它。您不应该在没有var关键字的情况下声明它,因为这被认为是一种不好的做法


请尝试我的第一个建议,因为这是我唯一可以在不知道其他js代码结构的情况下帮助您的建议。

应该可以适用于我范围似乎正确,检查您是否覆盖或删除您的var位置。基本上,“推送”是数组对象的一种原型方法,错误意味着在您的案例中“位置”不是数组对象,而是未定义的,由于未定义,它没有“push”方法。你指的是哪个元素。someclass,因为val不会对每个元素都起作用。也许告诉/标记你试图修改的插件或显示更多代码,我们将更能帮助你,我真的不认为错误在那块代码中。所有这些代码都在任何函数中吗?正因为如此,var头寸不会像@SteveP在其回答中所建议的那样位于全局范围内,我认为这是在OP的代码示例中的根级别上,
positions
是在可供
addHistory
访问的范围内声明的。另外,它是使用
var
声明的。是的,看起来是这样,但是如果是这样的话,该错误不应该出现,可能他遗漏了代码。
var
关键字建议是因为人们发布了其他答案。