javascript atob返回'字符串包含无效字符' [英] javascript atob returning 'String contains an invalid character'
问题描述
我有一个AJAX调用从Github API获取信息。它以base64编码返回,但是当我尝试解码它时,我得到了上述错误。
I have an AJAX call getting info out of the Github API. It is returned in base64 encoding but when i try to decode it I get the aforementioned error.
有没有人遇到过这个并且知道发生了什么?服务器返回的信息通过基于Web的解码器运行良好。也许它在变量中有点受损? IDK:/
Has anyone run into this before and know what is going on? The info the server is returning runs fine through web based decoders. Maybe it get s mangled a bit in a variable? IDK :/
(function () {
'use strict';
var objectsList = [];
var isParsing = 0;
var insertArea = $('body');
function makeAJAXCall(hash, cb) {
$.ajaxSetup({
Accept: 'Application/vnd.github.raw+json',
dataType: 'jsonp'
});
$.ajax({
url: hash,
success: function (json) {
if (cb) {
cb(json);
}
},
error: function (error) {
console.error(error);
throw error;
}
});
}
function parseBlob(hash, cb) {
makeAJAXCall(hash, function (returnedJSON) { // no loop as only one entry
if (cb) {
cb(returnedJSON.data.content);
}
});
}
function addSVGToPage(SVGToAdd) {
var entry, decodedEntry;
makeAJAXCall(SVGToAdd, function (returnedJSON) {
console.info(window.atob(returnedJSON.data.content));
});
}
function parseTree(hash) {
var i, entry;
var tree = 'https://api.github.com/repos/myusername/SVG-Shapes/git/trees/' + hash;
makeAJAXCall(tree, function (returnedJSON) {
for (i = 0; i < returnedJSON.data.tree.length; i += 1) {
entry = returnedJSON.data.tree[i];
if (entry.type === 'blob') {
if (entry.path.slice(-4) === '.svg') { // we only want the svg images not the ignore file and README etc
addSVGToPage(entry.url);
}
} else if (entry.type === 'tree') {
parseTree(entry.sha);
}
}
});
}
$(document).ready(function () {
parseTree('master');
});
}());
编辑:下面是从console.info返回的内容示例(returnedJSON.data.content );
below is a sample of what is returned from a console.info(returnedJSON.data.content);
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCFET0NU WVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0 cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRk Ij4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHht bG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJz aW9uPSIxLjEiIGhlaWdodD0iMjQiIHdpZHRoPSI0MDAiPgkKCTxkZWZzPgoJ CTxwYXR0ZXJuIGlkPSJzdHJpcGVkYmFjayIgaGVpZ2h0PSIyMCIgd2lkdGg9 IjIwIiB5PSIyIiBwYXR0ZXJuVW5pdHM9InVzZXJTcGFjZU9uVXNlIiBvdmVy Zmxvdz0ic2Nyb2xsIj4KCQkJPGcgdHJhbnNmb3JtPSJza2V3WCgtMjApIj4K CQkJCTxyZWN0IHg9Ii0xMCIgeT0iMCIgd2lkdGg9IjEwIiBoZWlnaHQ9IjIw IiBzdHJva2U9Im5vbmUiIGZpbGw9IiNGMkYyRjIiLz4KCQkJCTxyZWN0IHg9 IjAiIHk9IjAiIHdpZHRoPSIxMCIgaGVpZ2h0PSIyMCIgc3Ryb2tlPSJub25l IiBmaWxsPSIjRTJFMkUyIi8+CgkJCQk8cmVjdCB4PSIxMCIgeT0iMCIgd2lk dGg9IjEwIiBoZWlnaHQ9IjIwIiBzdHJva2U9Im5vbmUiIGZpbGw9IiNGMkYy RjIiLz4KCQkJCTxyZWN0IHg9IjIwIiB5PSIwIiB3aWR0aD0iMTAiIGhlaWdo dD0iMjAiIHN0cm9rZT0ibm9uZSIgZmlsbD0iI0UyRTJFMiIvPgoJCQk8L2c+ CgkJPC9wYXR0ZXJuPgoKCQk8cmVjdCBpZD0iaW5uZXJjdXQiIHg9IjIiIHkg PSIxIiB3aWR0aD0iMzk2IiBoZWlnaHQ9IjIyIi8+CgoJCTxjbGlwUGF0aCBp ZD0ibG9hZGNsaXAiPgoJCQk8dXNlIHhsaW5rOmhyZWY9IiNpbm5lcmN1dCIv PgoJCTwvY2xpcFBhdGg+Cgk8L2RlZnM+CgoJPHJlY3Qgd2lkdGg9IjQwMCIg aGVpZ2h0PSIyNCIgeD0iMCIgeT0iMCIgc3R5bGU9InN0cm9rZS13aWR0aDoy cHg7c3Ryb2tlOmdyZXk7Ii8+ICA8IS0tIEJhY2tpbmcgcmVjdC9mcmFtZSAt LT4KCgk8ZyBjbGlwLXBhdGg9InVybCgjbG9hZGNsaXApIj4KCQk8cmVjdCB4 PSItMTgiIHkgPSIyIiB3aWR0aD0iNTE2IiBoZWlnaHQ9IjIwIiBzdHlsZT0i c3Ryb2tlLXdpZHRoOjBweDtzdHJva2U6Z3JleTsiIGZpbGw9InVybCgjc3Ry aXBlZGJhY2spIj4KCQkJPGFuaW1hdGVUcmFuc2Zvcm0KCQkgICAgICAgIGF0 dHJpYnV0ZVR5cGU9IlhNTCIKCQkgICAgICAgIGF0dHJpYnV0ZU5hbWU9InRy YW5zZm9ybSIKCQkgICAgICAgIHR5cGU9InRyYW5zbGF0ZSIKCQkJCWZyb209 IjIwIiB0bz0iMCIKCQkJCWJlZ2luPSIwcyIgZHVyPSIwLjZzIgoJCQkJcmVw ZWF0Q291bnQ9ImluZGVmaW5pdGUiCgkJCQlhZGRpdGl2ZT0ic3VtIi8+CgkJ PC9yZWN0PgoJPC9nPgo8L3N2Zz4K
推荐答案
atob
由于响应中的换行符而中断。删除它们以使代码工作:
atob
breaks due to the newlines in the response. Remove them to get your code to work:
function addSVGToPage(SVGToAdd) {
var entry, decodedEntry; // <-- What is this doing here? It's unused.
makeAJAXCall(SVGToAdd, function (returnedJSON) {
console.info(window.atob(returnedJSON.data.content.replace(/\s/g, '')));
// ^^^^^^^^^^^^^^^^^^^
});
}
这篇关于javascript atob返回'字符串包含无效字符'的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!