$ .getJSON返回未定义并产生XML解析错误

时间:2018-06-30 23:23:40

标签: javascript jquery html json

在开始之前,我想指出这是针对一个学校项目的,并且我已经查看了多个搜索结果,经过2个小时的搜索,我坦率地放弃了...我的问题是代码:

var books;
var x = $.getJSON("book_data.json", function(response){
    books = response;
});
console.log(x.responseJSON, books);

记录以下内容:

undefined undefined

有错误:

XML Parsing Error: syntax error
Location: file:///C:/Users/.../book_data.json
Line Number 1, Column 1:

可以找到here

我添加了

console.log(response);
在getJSON块中

以确保它可以解析它(可以做到),以及仅记录x以确保我确实获得了正确的响应(我可以这样做)。我发现了其他堆栈溢出,并尝试了他们的建议,但仍然无法解决此问题。有没有更好的方法来获取我想要的信息,或者我应该放弃,只需将json转换为一个衬纸并将其放入我的html文件中?

3 个答案:

答案 0 :(得分:1)

$。getJSON是一个异步方法,您只需要在回调函数中读取json内容。

此外,由于您正在从本地C:驱动器读取json文件,因此暗含了“ text / xml”的mimeType,因此您的浏览器将尝试将其解析为XML到基础XHR对象的.responseXML中。这将导致XML解析错误。您需要在调用getJSON之前指定mimeType,

$.ajaxSetup({
    scriptCharset: "utf-8",
    contentType: "application/json; charset=utf-8"
});

var books;
var x = $.getJSON("book_data.json", function(response){
    books = response;
    console.log(JSON.stringify(books));
});

还有一件事,请确保book_data.json具有有效的json数据

答案 1 :(得分:0)

经过多次尝试加载JSON的尝试,我找到了解决方案。当我尝试在Firefox中加载JSON时,我没有遇到任何致命错误,但是在Chrome中打开它却成功了。 Chrome也给出了一个原因(并从内存中做到这一点),但它与安全性问题有关(我的猜测是为了防止潜在的XSS)。

我能够使用http://myjson.com/存储JSON并获取所需的文件,而不会出现错误。我假设发生了错误,因为我是从html文件而不是从处理该文件的服务器在本地运行它。

答案 2 :(得分:0)

在我的情况下,我使用自己的代码作为服务器(基本上是借用here)和标头

Content-Type: application/json

不见了。已添加

    httpExchange.setAttribute("Content-Type", "application/json");

到服务器的代码,它就起作用了。