首页 > 解决方案 > 使用 Firefox Scratchpad vs node/JSFiddle 与 JSON.parse 不同的结果

问题描述

var primariesText, primaries;
//var XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest; //node
var requestURL = 'https://raw.githubusercontent.com/WFCD/warframe-items/development/data/json/Primary.json';
var request = new XMLHttpRequest();
request.open('GET', requestURL);
request.responseType = 'json';
request.send();
request.onload = function() {
  primariesText = request.response;
    //console.log(primariesText);
}
primaries = JSON.parse(JSON.stringify(primariesText[0]));
console.log(primaries);

我从 3 个解析器中尝试了这个脚本并得到了不同的结果:

当我在 Firefox 的暂存器中运行它时,它会很好地输出 JS 对象。

当我在节点或 JSFiddle https://jsfiddle.net/bn56hspk/中运行它时,我得到了

TypeError: Cannot read property '0' of undefined

指向primariesText[0] 数组。

我把 [0] 放在那里的原因是为了摆脱大多数括号。我尝试了两个primariesText []

SyntaxError: Unexpected token ]

或primariesText

节点:

SyntaxError: Unexpected token u in JSON at position 0

JSF中:

SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data

两者都不起作用。

我错过了什么?

标签: javascriptjsonxmlhttprequest

解决方案


这里的问题是您尝试在调用函数之前解析 JSON。onload所以primariesText只是未定义。

在这里,我在函数内部解析它onload并按预期工作(注意这里的封闭花括号如何在}代码末尾结束)

var primariesText, primaries;
//var XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest; //node
var requestURL = 'https://raw.githubusercontent.com/WFCD/warframe-items/development/data/json/Primary.json';
var request = new XMLHttpRequest();
request.open('GET', requestURL);
request.responseType = 'json';
request.send();
request.onload = function() {
  primariesText = request.response;
    //console.log(primariesText);

primaries = JSON.parse(JSON.stringify(primariesText[0]));
console.log(primaries)
}

推荐阅读