javascript - 从本地文件系统加载 JSON 文件时出现 "Unexpected end of JSON input"错误

标签 javascript json ajax

您好,我正在尝试使用 AJAX 调用将 title.JSON 文件中的数据检索到 index.html 文件中。这两个文件都驻留在我的本地文件系统中。我已经创建了一个新的 chrome 实例并已设置其目标属性为 "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"--disable-web-security --user-data-dir="c:/chromedev"(我知道这不是一个好的做法。只是尝试一种无服务器的方式)。下面是我的代码

<h1><a id="headName" href="#">Name</a></h1>
<p onclick="spaLoad()">NameChange</p>

function spaLoad(){
            var xhr = new XMLHttpRequest();
            xhr.open('GET','title.json',true);
            xhr.send();

                xhr.onreadystatechange=function () {
                    //var obj=xhr.responseText;
                     var obj = JSON.parse(xhr.responseText);
                    console.log(obj);
                    console.log(xhr.readyState);
                    console.log(xhr.status);
                    console.log(xhr.statusText);
                    //document.getElementById('headName').innerHTML = obj;
                    document.getElementById('headName').innerHTML = obj.name;

                }
            }

标题.json

{"name":"stackoverflow","age":"100"}

我通过 ajax 调用将我的 h1 更新为“stackoverflow”并出现错误

Uncaught SyntaxError: Unexpected end of JSON input at JSON.parse () at XMLHttpRequest.xhr.onreadystatechange

我的疑问是: 1.我希望AJAX用于客户端和服务器之间的通信。虽然我通过修改浏览器设置来避免使用服务器,但 ajax 调用对我来说是如何工作的?这符合逻辑吗? 2.JSON文件包含作为对象的数据。那么为什么我应该使用JSON.parse(responseText)?(JSON.parse()用于将字符串从服务器转换为客户端的对象,我希望)。如果我直接给出var obj=xhr.responseText;我未定义。 3.readystate变成4了,但是status一直是0,为什么会这样?如何解决。

请简要解释一下这个无服务器ajax调用是如何工作的。我对ajax很陌生,对此感到困惑。

最佳答案

这是因为就绪状态更改会触发多次,而您希望它触发一次。您需要检查readystate是否等于4,状态是否为200(或者在您的情况下为零,因为您使用的是文件协议(protocol))。或者改用 onload 和 onerror 事件。

如果您仍然遇到解析错误,则需要调试返回的内容。

//see what is returned
console.log(xhr.responseText)
//Look to see if you have hidden characters in the file.
console.log(escape(xhr.responseText))

发生解析错误的原因可能是您正在加载的文件返回其他内容(例如错误页面),或者它具有导致解析器阻塞的特殊隐藏字符。

关于javascript - 从本地文件系统加载 JSON 文件时出现 "Unexpected end of JSON input"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46299450/

相关文章:

javascript - ExtJS/Javascript : adding a child Model to a parent Model, 在网格上呈现

javascript - 在wordpress中使用ajax更新变量

php - jquery/js 和 php 通信问题

javascript - Ajax 不适用于具有 2D 数组参数的 C# Controller 操作

javascript - 判断页面是否刷新

javascript - 我怎样才能逃脱并删除“;”?从 Rails 提供的数据到 JavaScript

javascript - 当 child 变长时父 div 变长

javascript - 无法编写 GraphQL Mutation 来在数据库中创建新用户

php - 如何访问在 php 中命名为变量的对象属性?

java - 将包含另一个 JSON 字符串的 JSON 对象解析为对象