0

現在、Google Chromeの拡張機能を作成しています。ウェブサイトの応答ヘッダーに関する情報を調べる必要があります。これを行うには、getAllResponseHeadersメソッドを使用しましたが、JSONオブジェクトに入れる必要があります。残念ながら、私はエラーメッセージSyntaxError: Unexpected token D in JSON at position 0 at mainを得続けます。ここで getAllResponseHeadersメソッドからJSONオブジェクトを作成する方法

は、私がこれまでのところ、これを行うために使用していたコードです:

xmlhttp.open("GET", url, false); 
xmlhttp.onreadystatechange=function() { 
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
     allResponseHeaders = xmlhttp.getAllResponseHeaders(); 
    } 
}; 
xmlhttp.send(); 

var responseHeaders = JSON.parse(allResponseHeaders); 
obj.headers = responseHeaders; 

私はallResponseHeaders = xmlhttp.getAllResponseHeaders();呼び出した直後に警告を入れた場合、アラートはコールが成功したことを示しています。応答ヘッダーがすべて取得されました。最初の応答ヘッダーは、私のエラーメッセージのUnexpected token D部分と関係があると思われるDateですが、なぜそれが正しく解析されないのかわかりません。これをどうやって解決するのですか?前もって感謝します。

編集:私はこのような何かを見て、私のJSONオブジェクトを希望:

{ 
    "headers": { 
    "Date": "June 20, 2016", 
    "Content-Type": "charset=UTF/8", 
    ... 
    } 
} 
+1

JSON.parse()はJSONが含まれていない文字列に仕事に行くされていない...それはparseFloatは()は、文字列「こんにちは」上で動作しない理由を尋ねるようなものです。 – nnnnnn

+0

それをJSON文字列に変換する方法はありますか? –

+0

希望の出力形式は何ですか?あなたの質問を編集してください。また、その変数に値を代入した直後に 'console.log(allResponseHeaders)'を追加して、それがどの形式であるかを知ることができます。 – nnnnnn

答えて

3

https://msdn.microsoft.com/en-us/library/ms536428(v=vs.85).aspxを参照してください。戻りヘッダーは、各行にコロンで区切られたキー値が含まれるcrlf区切り文字列です。空白を考慮するには、おそらく以下のコードを調整する必要があります。

var arr = allResponseHeaders.split('\r\n'); 
var headers = arr.reduce(function (acc, current, i){ 
     var parts = current.split(': '); 
     acc[parts[0]] = parts[1]; 
     return acc; 
}, {}); 
0

Ajaxは非同期呼び出しであり、あなたが使用している場合allResponseHeadersが初期化されないかもしれないのであなたは、コールバックonreadystatechangeJSON.parseロジックを置く必要がありますhttpリクエストを送信した直後です。

関連する問題