仅在firefox中出现JSON语法错误
我在使用$.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对象{"token":"$2y$10$jcr.P3FNqeji6RqD93LnxeIKs9gYNiPj7cboahz8RCCSgKw7VOfhi"}
在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()
的Object { token: "$2y$10$60vxSZiVqushBLVHSR5jPO6MquD4…" }
就是这个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') { }