使用$.parseJSON()
时,我在FireFox中遇到语法错误。相同的代码在Chrome / Chromium和Safari上正常运行。
我调用此函数来获取随机生成的令牌。
function getToken() {
var url = "/csrf_token_generate";
$.ajax({
url: url,
method: "GET"
}).done(function(data) {
console.log(data); // Logs the data from the call
var json = $.parseJSON(data); // Where the error occurs
token = json.token;
console.log(token);
});
}
网址/csrf_token_genrate
返回类似于{"token":"$2y$10$jcr.P3FNqeji6RqD93LnxeIKs9gYNiPj7cboahz8RCCSgKw7VOfhi"}
在网址中,我将Content-Type
设置为application/json
,并且可以在其他所有浏览器中使用。
我得到的错误就是这个
SyntaxError: JSON.parse: unexpected character at line 1 column 2 of the JSON data
n.parseJSON() jquery.min.js:4
getToken/<() wheel.bak.js:94
n.Callbacks/j() jquery.min.js:2
n.Callbacks/k.fireWith() jquery.min.js:2
x() jquery.min.js:4
.send/b/<() jquery.min.js:4
正在console.log()
的对象是Object { token: "$2y$10$60vxSZiVqushBLVHSR5jPO6MquD4…" }
我似乎无法追踪为什么它只能在FireFox中工作,但在其他浏览器中工作正常。
更新1
我发现firefox试图解析已经解析过的对象,所以我将代码更改为
function getToken() {
var url = "/csrf_token_generate";
$.ajax({
url: url,
method: "GET"
}).done(function(data) {
var json = data;
token = json.token;
console.log(token);
});
}
现在可以在firefox中使用,但不能在Chromium中使用。
那有什么用呢?
答案 0 :(得分:1)
我认为你应该查看Response Headers
- &gt; Content-Type
找到实际的Data Type
。
兼容代码应该是这样的。
# for chrome
if(typeof data === 'string') {
}
#for firefox
if(typeof data === 'object') {
}