我有一个网站,并且使用了 AJAX。我遇到了一些问题。
服务器返回类似这样的 JSON 字符串 {a:"x48\x65\x6C\x6C\x6F"}
。
然后在xx.responseText
中,我们有这个字符串'{a:"\x48\x65\x6C\x6C\x6F"}'
。
但是如果我创建 JavaScript 字符串 "\x48\x65\x6C\x6C\x6F"
那么我得到的是 "Hello"
而不是十六进制!
是否可以从十六进制获取xx.responseText
“真实”文本(自动,无需.replace()
)?
最佳答案
如果输出完全规则(可预测),.replace()
可能是最简单的。
var escapeSequences = xx.responseText.replace(/^\{a:/, '').replace(/\}$/, '');
console.log(escapeSequences === "\"\\x48\\x65\\x6C\\x6C\\x6F\""); // true
或者,如果一个字符串文字的值相等但在其他方面可能不相同就足够了,您可以解析(见下文),然后 stringify()
个人属性(property)。
console.log(JSON.stringify(data.a) === "\"Hello\""); // true
否则,您可能需要通过 lexer 运行 responseText
将其标记化并从中检索文字。 JavaScript 不包含与解析/评估分开的选项,因此您需要为此找到一个库。
“Lexer written in JavaScript?”可能是一个很好的起点。
<小时/>解析它:
由于它看起来是一串代码,因此您可能必须使用 eval()
.
var data = eval('(' + xx.responseText + ')');
console.log(data.a); // Hello
注意:括号确保 {...}
被评估为 Object
literal而不是作为block .
此外,我建议研究用于此类数据通信的代码的替代方案。
常见选项是 JSON
,它的语法取自 JavaScript,但使用了相当严格的子集。它不允许包含函数
或其他可能有问题的代码。
var data = JSON.parse(xx.responseText);
console.log(data.a); // Hello
访问JSON.org ,您应该能够找到用于选择服务器端语言来输出 JSON 的引用或库。
{ "a": "Hello" }
关于javascript - 如何解码 XMLHttpRequest 中的十六进制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18770863/