javascript - 类型错误 : invalid 'in' operand a error when calling jQuery each inside RequireJS module

标签 javascript jquery gruntjs requirejs amcharts

我有以下 RequireJS 模块,我用它来使用 AmCharts 构建图表。 (为了简洁起见,我删除了一些代码)。

define('admin/stats', ['jquery', 'amcharts.serial'], function($, AmCharts) {

    var historicalStats = {

        init: function(rawData, axesMarker) {

            var originalData = rawData,
            charts = $('#charts');

            console.log(originalData);

            $.each(originalData, function(graphName, config) {
                // ...call a function in here...
            });

        }

    };

    return historicalStats;

});

这就是我的称呼:

<script type="text/javascript">

    require(['admin/stats'], function(stats) {
        stats.init('{{ data|raw }}', '{{ "graphs.axes.filesize"|trans({}, "admin") }}');
    });

</script>

我遇到的问题是行 $.each(originalData, function(graphName, config) { 错误,内容如下:

TypeError: invalid 'in' operand a
...w:this,function(a,b){function c(a){var b="length"in a&&a.length,c=_.type(a);retu...

(我使用 grunt 来缩小 JavaScript)。

originalData 看起来像这样:

{"users":{"series":[{"field":"users","title":"Users"}],"type":"raw","axesMarker":"Users","data":[]},"fileusage":{"type":"filesize","axesMarker":"File size","series":[],"data":[]},"dbsize":{"series":[{"field":"dbsize","title":"Database size"}],"type":"filesize","axesMarker":"File size","data":[]}}

我通过注释掉其他所有内容,将错误追溯到该行。那行不正确的是什么?

最佳答案

在此通话中:

stats.init('{{ data|raw }}', '{{ "graphs.axes.filesize"|trans({}, "admin") }}');

您传递一个字符串作为第一个参数。然后 $.each 尝试在此字符串中查找 "length":"length"in a (其中 a code> 被初始化为与传递给 stats.init 的第一个参数相同的值。

如果 {{ data|raw }} 是格式正确的 JavaScript 对象或 JSON,则可以删除引号。但是,我担心您如何在代码中将 rawData 复制到 originalData 。如果您只是删除引号并获取 JavaScript 对象,请注意,如果您在后面的代码中修改 originalData,那么 rawData 也会有相同的修改 因为你没有克隆它。因此,如果您想将其与 originalData 的更改隔离开来,则必须克隆它。 (克隆的方法有很多种,哪种方法最适合您的情况取决于您的问题中没有的详细信息。)

另一种可能性是按原样保留对 stats.init 的调用,但在函数内部执行以下操作:

var originalData = JSON.parse(rawData)

这假设 {{ data|raw }} 的 JSON 格式正确。

关于javascript - 类型错误 : invalid 'in' operand a error when calling jQuery each inside RequireJS module,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39630716/

相关文章:

javascript - Chrome 31.0 HTML5 Canvas 绘制图像

javascript - Flash 在页面加载时处于事件状态

javascript - 使用 Gmaps.js 将 Google Map 置于引导模式中

javascript - 如何使用 Javascript 使 HTML 表格中的多行不可见

javascript - jQuery Calculate (window).innerHeight() 减去 vh

javascript - Bootstrap 附加功能无法正常工作

javascript - 不使用 Bootstrap 验证上传带有 .jpg 扩展名的照片

javascript - 超出 Grunt CSS minifier 调用堆栈

node.js - Jasmine spy document.execCommand 未被调用

javascript - 将 load-grunt-config 与 Sails.js 结合使用