【问题标题】:SyntaxError: JSON.parse: unexpected end of data at line 1 column 1 of the JSON dataSyntaxError: JSON.parse: JSON 数据的第 1 行第 1 列的数据意外结束
【发布时间】:2015-03-04 15:04:24
【问题描述】:

好的,所以我正在尝试从包含几个 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 数据的格式总是正确的。我不明白错误来自哪里。有什么想法吗?

【问题讨论】:

  • 要么在函数的开头抛出一个断点,要么在你的网络选项卡中观察网络流量,看看数据在出错之前是什么样子的。如果它在 20 次中只发生 1 次,那么您的代码可能没问题,并且数据一定不能正确输入。
  • 你看错前数据是什么了吗? console.log(data);你确定服务器没有返回不同的东西吗?
  • 我有时会在几次请求后收到会话 tmp files clear up failed 消息。也许有些事情搞砸了响应。
  • Unexpected end of inputline 1 column 1 的错误表明data 是一个空字符串。由于服务器似乎不认为这是一个错误,因此文件在尝试读取时可能是空的。
  • 我认为 Jonathan Lonowski 是在做某事。我设置了一个断点,即使在错误发生之前数据也是相同的。我认为正在发生的事情是我编写的用于调整 JSON 文件的脚本是一次写入一个值,而不是一次写入所有值。因此,如果行星以特定方式对齐,当某些值丢失时读取 JSON 文件等,会发生什么。我将重写该脚本,看看是否可以修复它。

标签: javascript jquery html json


【解决方案1】:

使用“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);
            }
        });
    })();
});

【讨论】:

  • 当我的 php 程序发送空字符串时出现此错误,console.log(output) 显示空字符串;错误是我的 php 方法甚至没有被调用,但我仍然得到一个空字符串。
【解决方案2】:

使用 Firefox 调试,当我收到该错误时,我能够看到返回的值类型是未定义的。首先检查要解析的值是否为空/未定义,然后如果条件为假,则继续解析,否则处理条件解决了我的问题。

【讨论】:

    【解决方案3】:

    事实证明,该错误与 JSON 无关。这实际上是因为后端返回了非 JSON 或空字符串。

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

    对我来说,这行得通。祝你好运

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-27
      • 2017-04-28
      • 2023-02-08
      • 2015-11-22
      • 1970-01-01
      • 1970-01-01
      • 2020-09-15
      • 1970-01-01
      相关资源
      最近更新 更多