IE8错误:为null或不是对象,但仍可以跟踪/控制台注销

时间:2015-03-25 06:03:44

标签: javascript json internet-explorer-8

我在IE8中遇到了JS错误,但是对于我的生活似乎无法找到解决此错误的原因。

我引用了一个已经使用jQuery&{39} $.getJSON()请求和解析的JSON文件。完成后,我使用一个被触发的事件(pub / sub),从那里开始我需要对解析的JSON文件做什么。

一切顺利,IE8在imgPath变量声明(下面)上抛出错误。我通过<img>属性将图片加载到src标记中。

//This is function is inside a object
IE8_loadImage: function($root, data) {
        var self       = this,
            $comp      = $root.data('comp').parent,
            $imgHolder = $root.data('comp').IE8holder,
            imgPath    = $root.data('json')[data.scene][data.convo]['ie8Img'];

        console.log(typeof $root.data('json')); //outputs to 'object'
        console.log(imgPath);                   //outputs to 'images/1-0.jpg'
        console.log(typeof imgPath);            //output 'string'
        console.log(typeof data.scene);         //output 'string'
        console.log(typeof data.convo);         //output 'string'

        //Set the source
        $imgHolder.css('z-index', 5).attr('src', imgPath);
    },

奇怪的是我可以在console.log中输出imgPath变量并从JSON获得预期的结果。

JSON(在jsonlint.com上检查)文件如下:

{
"demo": {
    "scene1": {
        "c0": {
            "text": "Lorem ipsum Tempor magna nisi non enim fugiat do dolor dolore esse aliquip irure ullamco cillum dolor reprehenderit eiusmod dolore irure commodo et reprehenderit voluptate dolore Ut in Duis tempor tempor esse et Duis enim.",
            "ie8Img": "images/1-0.jpg",
            "audio": { 
                "source": "audio/s1-1.mp3",
                "autoplay": "true"
            }
        },
        "c1": {
            "text": "Lorem ipsum Tempor magna nisi non enim fugiat do dolor dolore esse aliquip irure ullamco cillum dolor reprehenderit eiusmod dolore irure commodo et reprehenderit voluptate dolore Ut in Duis tempor tempor esse et Duis enim.",
            "ie8Img": "images/1-1.jpg",
            "audio": {
                "source": "",
                "autoplay": "false"
            }
        }
    }
}

任何想法,或只是第二双关于为什么会发生这种情况的眼睛 - 都会很棒!感谢。

修改 错误消息为data(...)[...][...].ie8Img is null or not an object

1 个答案:

答案 0 :(得分:0)

似乎问题是我正在使用scrollTop动画进行双回调:

$('html,body').animate({
    scrollTop: $elem.offset().top - offset
}, self.options.speed, function() {
    // Callback function here...
    callback();
});

因此,使用调试器跟踪我的代码,此事件在IE8中针对&#39; html&#39;和&#39; body&#39;进行了两次触发。因此,我最终使用.promise()仅在动画完成后触发回调一次。由于它是两次射击,变量的更新速度太快了。