0

私はサイトを持っていて、AJAX を使用しました。そして、私はいくつかの問題を抱えています。

サーバーは、次のような JSON 文字列を返します{a:"x48\x65\x6C\x6C\x6F"}

次に、xx.responseTextこの文字列があります'{a:"\x48\x65\x6C\x6C\x6F"}'

しかし、JavaScript 文字列を作成すると、HEX ではなく、HEX"\x48\x65\x6C\x6C\x6F"が作成されます。"Hello"

xx.responseTextHEXから「実際の」テキストを取得することは可能ですか(自動的に、なしで.replace())?

4

2 に答える 2

2

出力がまったく規則的(予測可能) で.replace()ある場合は、おそらく最も単純です。

var escapeSequences = xx.responseText.replace(/^\{a:/, '').replace(/\}$/, '');

console.log(escapeSequences === "\"\\x48\\x65\\x6C\\x6C\\x6F\""); // true

または、値は等しいが他の点では同じではない可能性がある文字列リテラルで十分な場合は、解析 (以下を参照) してからstringify()個々のプロパティを解析できます。

console.log(JSON.stringify(data.a) === "\"Hello\""); // true

それ以外の場合は、レクサーresponseTextを実行してトークン化し、そこからリテラルを取得する必要があります。JavaScript には、解析/評価とは別のオプションが含まれていないため、このためのライブラリを見つける必要があります。

JavaScript で書かれた Lexer?」 は、その出発点として適しているかもしれません。


それを解析するには:

コードの文字列のように見えるので、おそらくeval().

var data = eval('(' + xx.responseText + ')');

console.log(data.a); // Hello

注: 括弧 make sureは、ブロックではなくリテラル{...}として評価されます。Object


また、このようなデータ通信用のコードに代わるものを検討することをお勧めします。

一般的なオプションは ですJSON。これは JavaScript の構文を使用しますが、かなり厳密なサブセットを使用します。functions やその他の潜在的に問題のあるコードを含めることはできません。

var data = JSON.parse(xx.responseText);

console.log(data.a); // Hello

JSON.orgにアクセスすると、JSON を出力するためのサーバー側言語を選択するための参照またはライブラリを見つけることができるはずです。

{ "a": "Hello" }
于 2013-09-12T17:53:54.610 に答える
1

JSONパーサーにその仕事をさせて\xエスケープシーケンスを処理させてから、後で文字列を再び16進数に変換してください。

function charToHex(c) {
    var hex = c.charCodeAt(0).toString(16);
    return (hex.length === 2) ? hex : '0' + hex;
}

"Hello".replace(/./g, charToHex);  // gives "48656c6c6f"
于 2013-09-12T19:19:34.930 に答える