【问题标题】:$.parseJSON - uncaught SyntaxError - how to check for undefined$.parseJSON - 未捕获的 SyntaxError - 如何检查未定义
【发布时间】:2014-04-03 17:22:28
【问题描述】:

当 cookie $.cookie('chk_ar') 未定义时,我有以下 jQuery 函数抛出 Uncaught SyntaxError: Unexpected token u

function checkBgNoise() {
// check background noise option state,
// if true, click 'on' to activate
// then add classes and check checkboxes

if( $.cookie('bg-noise-state') === 'true' ) {
  $('#bg-noise-on').trigger('click');

  // check for bg-noise array cookie
  var chk_ar = $.cookie('chk_ar');

  // convert string to object
  chk_ar = $.parseJSON(chk_ar);

  // loop through and apply checks to matching sets
  $.each(chk_ar, function(index, value) {
    // add bg-noise class for activated areas
    $('.' + value).addClass('bg-noise');
    // check those areas
    $('input').filter('[data-at="'+value+'"]').prop('checked', true);
  });

} else if ( $.cookie('bg-noise-state') === 'false' ) {

  // remove classes when selecting 'off'
  var chk_ar = $.cookie('chk_ar');
  chk_ar = $.parseJSON(chk_ar);
  $.each(chk_ar, function(index, value) {
    // remove bg-noise added on toggling off noise
    $('.' + value).removeClass('bg-noise');
    // uncheck the boxes
    $('input').filter('[data-at="'+value+'"]').prop('checked', false);
  });      
};

}; // end function checkBgNoise

我仍在学习 javascript 技巧,因此我的方法完全有可能存在一些相当明显的错误。该代码通常可以正常运行,但如果可能,我想摆脱该错误。

在 Stack Exchange 和 Google 上搜索错误代码表明问题出在对 $.parseJSON(chk_ar) 的调用中,该调用有时未定义。关于如何解决这个问题的任何想法?一个简单的if 声明?

【问题讨论】:

  • if (chk_ar == "undefined") return;
  • 谢谢@Archer。原谅我的无知,但那会去哪里呢?在每个if statement的最后?
  • 每次尝试将值分配给chk_ar 时将其直接放在后面。我认为如果它是未定义的,那么继续下去是没有意义的,所以它只会退出。
  • 嗯...这不起作用。我已经在多个地方应用了它,但没有雪茄。我还尝试将checkBgNoise 函数的内部代码封装在if (($.cookie('chk_ar')) != "undefined") 中,但这也不起作用。也许不可能嵌套 if 语句? (似乎不太可能。)
  • 我们都从某个地方开始。似乎不久前我还在输入10 PRINT "John is cool"20 GOTO 10。不过,由于衰老,这似乎不是很久以前 - 那是 30 多年前:p

标签: javascript jquery json cookies


【解决方案1】:

我做了一个小的修改,所以你在函数顶部得到chk_ar,如果它未定义,则退出。由于两个州都需要它,所以在顶部获取并检查是有意义的......

function checkBgNoise() {
    // get this here since both states need the value - exit if it's undefined
    var chk_ar = $.cookie('chk_ar');
    if (chk_ar == undefined) return;

    // check background noise option state,
    // if true, click 'on' to activate
    // then add classes and check checkboxes

    if( $.cookie('bg-noise-state') === 'true' ) {
        $('#bg-noise-on').trigger('click');

        // convert string to object
        chk_ar = $.parseJSON(chk_ar);

        // loop through and apply checks to matching sets
        $.each(chk_ar, function(index, value) {
            // add bg-noise class for activated areas
            $('.' + value).addClass('bg-noise');
            // check those areas
            $('input').filter('[data-at="'+value+'"]').prop('checked', true);
        });
    }
    else if ( $.cookie('bg-noise-state') === 'false' ) {
        // remove classes when selecting 'off'
        chk_ar = $.parseJSON(chk_ar);
        $.each(chk_ar, function(index, value) {
            // remove bg-noise added on toggling off noise
            $('.' + value).removeClass('bg-noise');
            // uncheck the boxes
            $('input').filter('[data-at="'+value+'"]').prop('checked', false);
        });      
    };
} // end function checkBgNoise

【讨论】:

  • 有效!没有更多的错误 :) 我没想过只是在函数的开头检查 cookie...当然比简单地添加 另一个 if 语句要好得多。
  • 很高兴它帮助了伴侣:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-13
  • 1970-01-01
  • 2012-05-21
  • 2016-11-03
  • 2011-01-05
相关资源
最近更新 更多