我有一个简单的脚本,它执行跨站点请求并从 GitHub gist 获取数据。来自 Github API 的数据以 JSON 字符串形式返回。为了允许进一步修改数据,我希望它是一个 JSON 对象。
// Create the XHR object.
function createCORSRequest(method, url) {
var xhr = new XMLHttpRequest();
if ("withCredentials" in xhr) {
// XHR for Chrome/Firefox/Opera/Safari.
xhr.open(method, url, true);
} else if (typeof XDomainRequest != "undefined") {
// XDomainRequest for IE.
xhr = new XDomainRequest();
xhr.open(method, url);
} else {
// CORS not supported.
xhr = null;
}
return xhr;
}
var tmpJSON = "";
var gistData = "";
var gistID = "5789756";
var gitAPI = "https://api.github.com/gists/"
var gistQuery = gitAPI + gistID;
function incrementGist() {
gistData = createCORSRequest('GET', gistQuery);
gistData.send();
tmpJSON = JSON.parse(gistData.response);
}
在html页面中,我有
<p><input type="button" value="Increment" OnClick="incrementGist()"></p>
如果我真的按下按钮,我得到的错误是:
Uncaught SyntaxError: Unexpected end of input
但是如果我随后打开控制台并运行它:
var crap = JSON.parse(gistData.response);
它工作得很好。这在 Firefox 和 Chrome 中都会发生。我真的不明白为什么JSON.parse
命令在函数调用中失败,但在控制台中却没有。这里设置了一个实际的页面