Ajax语法:Uncaught SyntaxError:意外的标识符

时间:2016-08-07 08:39:02

标签: javascript jquery ajax

我收到了这个

  

未捕获的SyntaxError:意外的标识符错误

,为什么?我想我已经正确使用了语法?

// I've revised it
var json;
json = '{"1438905600":0,"1438992000":0}';
setTimeout( $('#example-heatmap').each(function() {
    if( json != null ){
    var obj = $.parseJSON(json);
    var now = new Date();
    new CalHeatMap().init({
      data: obj,
      start: new Date(2016, 0),
      cellSize: 11,
      range: 9,
      domain: 'month',
      domainLabelFormat: '%Y-%m',
      itemSelector: '#example-heatmap',
      legend: [1, 3, 5, 7],
      legendColors: {
        min: '#efefef',
        max: 'steelblue',
        empty: '#efefef'
      },
          tooltip: true
      //start: new Date(now.getFullYear(), now.getMonth() - 9)
    });
    } else {
        setTimeout( arguments.callee, 100 );
    }
}));

2 个答案:

答案 0 :(得分:1)

我认为您的.replace()不正确。

var tmp = content.replace('<![CDATA[').replace(']]>');

.replace()期望在W3Schools上提供searchvaluenewvalue

string.replace(searchvalue,newvalue) 

答案 1 :(得分:0)

您正在将jQuery#each的电话传递给setTimeout,但setTimeout需要一个包含JavaScript代码块的函数或字符串。 jQuery#each均未返回。

返回的值正在转换为字符串[object Object],这就是导致语法错误的原因。

要解决此问题,请创建一个lambda函数以包含对jQuery#each的调用:

setTimeout(function() {
    $('#example-heatmap').each(function() {
        if (json != null) {
            var obj = $.parseJSON(json);
            var now = new Date();
            new CalHeatMap().init({
                data: obj,
                start: new Date(2016, 0),
                cellSize: 11,
                range: 9,
                domain: 'month',
                domainLabelFormat: '%Y-%m',
                itemSelector: '#example-heatmap',
                legend: [1, 3, 5, 7],
                legendColors: {
                    min: '#efefef',
                    max: 'steelblue',
                    empty: '#efefef'
                },
                tooltip: true
                    //start: new Date(now.getFullYear(), now.getMonth() - 9)
            });
        } else {
            setTimeout(arguments.callee, 100);
        }
    });
});
但是,我必须说,你所做的事看起来非常黑客。您正在使用arguments.callee,现在已弃用,显然是在尝试“等待”异步操作。您应该使用回调或承诺正确处理异步。