仅firefox中存在JSON语法错误

JSON syntax error in firefox only

本文关键字:语法 错误 JSON 存在 firefox      更新时间:2023-09-26

使用$.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);
    });
}

URL /csrf_token_genrate返回类似于{"token":"$2y$10$jcr.P3FNqeji6RqD93LnxeIKs9gYNiPj7cboahz8RCCSgKw7VOfhi"} 的JSON对象

在URL中,我将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()’ed的对象就是这个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中无效。

那么,还有什么可以做的呢?

我认为您应该检查Response Headers->Content-Type以找到实际的Data Type。兼容的代码应该是这样的

# for chrome
if(typeof data === 'string') {
}
#for firefox
if(typeof data === 'object') {
}