您好我尝试使用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很新,并且对此感到困惑。
答案 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))
解析错误发生在您正在加载的文件返回其他内容(如错误页面)或者它具有导致解析器阻塞的特殊隐藏字符。