新しい方法I: fetch
TL; DR同期リクエストを送信したり、古いブラウザをサポートしたりする必要がない限り、この方法をお勧めします。
リクエストが非同期である限り、Fetch APIを使用してHTTPリクエストを送信できます。フェッチAPIはpromiseで動作します。これは、JavaScriptで非同期ワークフローを処理するための優れた方法です。このアプローチではfetch()
、リクエストの送信とResponseBody.json()
レスポンスの解析に使用します。
fetch(url)
.then(function(response) {
return response.json();
})
.then(function(jsonResponse) {
// do something with jsonResponse
});
互換性:Fetch APIは、IE 11とEdge 12&13ではサポートされていません。ただし、ポリフィルがあります。
新しい方法II: responseType
以下のようLonderenがで書かれた彼の答え、新しいブラウザは、あなたが使用できるようにするresponseType
応答の予想されるフォーマットを定義するプロパティを。解析された応答データには、response
プロパティを介してアクセスできます。
var req = new XMLHttpRequest();
req.responseType = 'json';
req.open('GET', url, true);
req.onload = function() {
var jsonResponse = req.response;
// do something with jsonResponse
};
req.send(null);
互換性:responseType = 'json'
IE11ではサポートされていません。
古典的な方法
標準XMLHttpRequestが全く持っていないresponseJSON
だけで、プロパティをresponseText
してresponseXML
。bitlyが実際にリクエストに対してJSONで応答する限りresponseText
、JSONコードをテキストとして含める必要があるので、次のコードを使用して解析するだけですJSON.parse()
。
var req = new XMLHttpRequest();
req.overrideMimeType("application/json");
req.open('GET', url, true);
req.onload = function() {
var jsonResponse = JSON.parse(req.responseText);
// do something with jsonResponse
};
req.send(null);
互換性:このアプローチは、XMLHttpRequest
およびをサポートするすべてのブラウザで機能しますJSON
。
JSONHttpRequest
を使用しresponseJSON
たいが、JQueryよりも軽量なソリューションが必要な場合は、JSONHttpRequestを確認してください。通常のXMLHttpRequestとまったく同じように機能しますが、responseJSON
プロパティも提供します。コードで変更する必要があるのは最初の行だけです。
var req = new JSONHttpRequest();
JSONHttpRequestは、JavaScriptオブジェクトをJSONとして簡単に送信する機能も提供します。詳細とコードは、http://pixelsvsbytes.com/2011/12/teach-your-xmlhttprequest-some-json/にあります。
完全な開示:私はPixels | Bytesの所有者です。私のスクリプトは問題の良い解決策だと思うので、ここに投稿しました。リンクを削除する場合は、コメントを残してください。
XMLHttpRequest
ありません。何が問題なのか。