SyntaxError:JSON.parse:JSON数据第1行第1列的意外数据结尾

时间:2015-01-06 21:13:33

标签: javascript jquery html json

好的,所以我试图从保存了几个LED等状态的json文件中提取数据。我有一个每秒运行几次的脚本并提取数据并且网页加载它。问题是,在服务器读取json文件大约20次之后,最终会抛出此错误。

  

SyntaxError:JSON.parse:第1行第1列的意外数据结尾   JSON数据

// For toggling the LED/switch status indicators using the json data
$(document).ready(function() {
    (function worker() {
        $.ajax({
            url: 'server_info.json',
            success: function(data) {
                var json = $.parseJSON(data);
                console.log(json); 
                if (json.led_1 == "off") {
                    // do stuff
                }        
                if (json.led_2 == "off") {
                    // do stuff
                } 
                if (json.led_3 == "off") {
                    // do stuff
                }        
            },
            complete: function() {
                // Schedule the next request when the current one's complete
                setTimeout(worker, 250);
            }
        });
    })();
});

json文件如下所示:

{ "led_1": "on", "led_2": "on", "led_3": "on" } 

在我看来,json数据始终格式正确。我不明白错误的来源。有什么想法吗?

3 个答案:

答案 0 :(得分:6)

使用" dataType"设置以识别响应的类型,以便.ajax()调用知道它的JSON并且不需要猜测。

这可能无法解决问题,因为很可能您的响应没有为引发错误的调用返回JSON。如果添加错误设置,您可以看到服务器在出错时返回的内容,但是如果请求完成,请检查控制台以查找从服务器返回的内容。正如我所说,如果你从$ .parseJSON()开始收到错误,它可能不是JSON。

$(document).ready(function() {
    (function worker() {
        $.ajax({
            url: 'server_info.json',
            dataType: 'json',
            success: function(data) {
                console.log(data); 
                if (data.led_1 == "off") {
                    // do stuff
                }        
                if (data.led_2 == "off") {
                    // do stuff
                } 
                if (data.led_3 == "off") {
                    // do stuff
                }        
            },
            error: function( data, status, error ) { 
                console.log(data);
                console.log(status);
                console.log(error);
            }
            complete: function() {
                // Schedule the next request when the current one's complete
                setTimeout(worker, 250);
            }
        });
    })();
});

答案 1 :(得分:2)

使用Firefox调试,当我得到该错误时,我能够看到返回的值类型未定义。首先检查要解析的值的null / undefined,然后如果condition为false,则继续解析,否则句柄条件解决了我的问题。

答案 2 :(得分:1)

结果是,错误与JSON无关。这实际上是由于后端返回了无JSON或空字符串。

// Update
    if(updateFile($id,$author)) {
      echo json_encode(
        array('message' => 'Post Updated')
      );
    } else {
      echo json_encode(
        array('message' => 'Post Not Updated')
      );
    }

对我来说,这可行。好运