" JSON输入的意外结束"从本地文件系统加载JSON文件时出错

时间:2017-09-19 11:38:06

标签: javascript json ajax

您好我尝试使用AJAX调用将title.JSON文件中的数据检索到index.html文件中。这些文件都驻留在我的本地文件系统中。我创建了一个新的chrome实例和& #39;已将其目标属性设置为"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"--disable-web-security --user-data-dir="c:/chromedev"(我意识到这不是一个好习惯。只是尝试更少的服务器).Below是我的代码

<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;

                }
            }

title.json

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

我将h1更新为&#34; stackoverflow&#34;通过ajax调用以及错误

  

Uncaught SyntaxError:JSON输入的意外结束       在JSON.parse()       在XMLHttpRequest.xhr.onreadystatechange

以下是我的疑惑: 我希望AJAX用于客户端和服务器之间的通信。虽然我通过修改浏览器设置避免使用服务器,但是ajax调用是如何为我工作的?这是合乎逻辑的吗? 2.JSON文件包含数据作为对象。那么我为什么要使用JSON.parse(responseText)?(JSON.parse()用于将字符串从服务器转换为客户端的对象我希望。)如果我直接给{{ 1}}我得到了未定义。 3.readystate正在变为4,但状态始终为0.为什么会这样?我怎么解决它。

请简要说明这个服务器如何减少ajax调用的工作原理。我对ajax很新,并且对此感到困惑。

1 个答案:

答案 0 :(得分:1)

这是因为readystate更改会多次触发,并且您希望它会触发一次。您需要检查readystate是否等于4,状态为200(或者在您使用文件协议时为零)。或者使用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))

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