javascript - 如何解码 XMLHttpRequest 中的十六进制?

标签 javascript ajax web xmlhttprequest

我有一个网站,并且使用了 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/

相关文章:

html - 尝试使网站响应时出现图像问题

php - 回显文本出现在错误的位置

javascript - 使用 jQuery 添加点击数字

javascript - Google Maps for Angular 指令无法正常工作

javascript - 如何实时显示我的数据库(Php、js、jquery、AJAX)

ajax 第一次加载页面时起作用

jquery - 实时 'required fields',输入内有标签

html - 在 Go 中制作网络应用程序?

javascript - Canvas,获取图片压缩大小和调整大小

javascript - 如何在一个js文件中组装angularjs项目