【问题标题】:JSON Parse Error: unexpected end of data at line 1 column 1 of the JSON dataJSON 解析错误:JSON 数据的第 1 行第 1 列的数据意外结束
【发布时间】:2017-12-31 21:19:36
【问题描述】:

我有一个数据库、analysis.php 和 index.php 网页。 analysis.php 从数据库中获取数据,按照所需的模式对其进行排序,然后将json_encode($array); 回显到ID 为“数据”的div 中。我正在尝试获取该 JSON 数据并在 index.php 页面中对其进行解析。

但是我遇到了一个错误。 SyntaxError: JSON.parse: unexpected end of data at line 1 column 1 of the JSON data

每当用户从选择框中选择一个选项时,我都会尝试获取此数据。

我的 jQuery 代码是:

$(document.body).on('change', '.select' , function () {
    var identification = $(this).val();
    var JSONText = $(this).closest('div[id|="module"]').find('p[id="JSON"]');
    JSONText.load('analysis.php?data=' + identification + ' #data');
    console.log("JSON Imported: '" + identification + "'");
    var obj = jQuery.parseJSON(JSONText.text());
    console.log(JSONText.text());
});

编辑: 如您所见,我有 sn-p console.log(JSON.text());。我得到的 JSON 输出是正确的。我认为唯一的问题可能是引号都是 " 而不是 JSON 引号与外部引号不同。

【问题讨论】:

  • 你的 json 看起来怎么样?也不要将您的变量命名为 JSON,因为浏览器本机 json 解析器已分配给它。刚看到这个,你在那儿干吗?使用jQuery.getJSON。
  • 在控制台中检查analysis.php 的XHR。 JSON 响应一开始可能不完整。
  • JSON 响应似乎有效。我已经在jsonlint.com 上检查了它的有效性。
  • @shadoweye14 在调用jQuery.load 时开始从服务器下载 JSON,但其他代码在此之后立即执行,因此在下载完成之前“异步”。所以你需要使用完整的回调来确保你的数据确实被加载了。
  • 不,“加载为 html,插入 dom,使用text 检索是危险的”。我添加了一个示例来阐明正确的用法。

标签: javascript jquery json


【解决方案1】:

jQuery.load 是异步的,您试图在 JSON 实际加载之前对其进行解析。使用jQuery.getJSON 加载内容、进行解析并提供可以绑定的回调。

jQuery.load 将内容加载为 HTML 并设置所选元素的 innerHTML,您也可以在此处绑定 complete 处理程序,但您可能会在将内容加载为 HTML 然后使用 @987654324 时遇到问题@ 从 DOM 中检索它,因为您的 JSON 的某些部分可能被解释为 HTML 元素。

最好用这个:

$(document.body).on('change', '.select' , function () {
    var identification = $(this).val();
    $.getJSON(
        'analysis.php?data=' + identification + ' #data',
        function (data) {
           console.log(data);
        }
    );
});

【讨论】:

  • 我尝试了该代码,但它没有产生任何结果。 console.log(data); 根本不会触发。没有迹象表明 getJSON 函数有任何作用。
  • 您实际上是在加载纯 JSON 吗?或者analysis.php 的输出是否包含非 json 输出?如果是这样,您可以将getJSON 替换为load 并使用console.log($.parseJSON(data)),但最好(更简洁)让analysis.php 输出纯JSON 可能会引入另一个参数,例如ajax=true。
  • 该页面确实包含我在上面的问题中定义的 HTML 元素。我想从具有特定 ID 的 div 中获取文本。
【解决方案2】:

除了 LJ_1102 的解决方案之外,还有一种方法可以修复您当前的 sn-p:

JSONText.load('analysis.php?data=' + identification + ' #data', function() {

    console.log("JSON Imported: '" + identification + "'");
    var obj = jQuery.parseJSON(JSONText.text());
    console.log(JSONText.text());

});

【讨论】:

  • 非常感谢 ;) 非常感谢。
  • 这很容易出错,只要 json 包含任何 html 字符,它就不会使用 jquerys text 方法正确检索。它还为XSS 攻击打开了所有大门。
猜你喜欢
  • 2021-03-22
  • 2015-03-04
  • 1970-01-01
  • 2015-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多