XML Http リクエストの最新の代替テクノロジー - フェッチ
Web アプリケーションでは、JavaScript は XMLHttpRequest を使用します (XHR) は、ページ通信を効果的に改善するテクノロジです。Ajax テクノロジについて話すときは、通常、XMLHttpRequest に基づく Ajax を意味します。それでも Ajax は便利ですが、最良の API ではありません。職務の分離、入力、出力、およびイベントで追跡される状態を単一のオブジェクトに混合するという原則に従うように設計されていません。さらに、イベントベースのモデルは、 JavaScript は、人気のある Promise やジェネレーターベースの非同期プログラミング モデルとは対立します。この記事で紹介するのは、XMLHttpRequest に代わる最新の技術です—— W3C の公式標準である Fetch API。
互換性
紹介する前に、主流のブラウザでの Fetch API の現在のサポートを見てみましょう:
Fetch のサポートは、Firefox 39 以降と Chrome 42 ではまだ初期段階にあります。 上記はすべてサポートされています。
今すぐ使用したい場合は、Fetch Polyfil を使用して、まだ Fetch をサポートしていないユーザーをサポートすることもできます。 ブラウザ。
Fetch を使用する前に、機能テストを実行することもできます:
if(self.fetch) { // run my fetch request here } else { // do something with XMLHttpRequest? }
簡単なフェッチの例
Fetch API で最も一般的に使用される関数は fetch() 関数です。 URL パラメータを受け取り、 対応することを約束します。応答は Response オブジェクトです。
fetch("/data.json").then(function(res) { // res instanceof Response == true. if (res.ok) { res.json().then(function(data) { console.log(data.entries); }); } else { console.log("Looks like the response wasn't perfect, got status", res.status); } }, function(e) { console.log("Fetch failed!", e); });
fetch() は、2 番目のオプションのパラメーターである、さまざまな構成を制御できる init オブジェクトを受け入れます。を提出する場合、 POST リクエストのコードは次のとおりです:
fetch("http://www.example.org/submit.php", { method: "POST", headers: { "Content-Type": "application/x-www-form-urlencoded" }, body: "firstName=Nikhil&favColor=blue&password=easytoguess" }).then(function(res) { if (res.ok) { //res.ok用于检测请求是否成功 console.log("Perfect! Your settings are saved."); } else if (res.status == 401) { console.log("Oops! You are not authorized."); } }, function(e) { console.log("Error submitting form!"); });
ネットワーク障害がある場合、fetch() Promise は拒否されます。 TypeError オブジェクト。 fetch() が成功したかどうかを正確に判断するには、Promise が解決された状況を含めて、この時点で Response.ok を決定する必要があります。 それは本当です。
Fetch は、GlobalFetch、Headers、Request、および 4 つのインターフェイスを実装します。 応答。 GloabaFetch には、ネットワーク リソースを取得するためのフェッチ メソッドが 1 つだけ含まれており、他の 3 つは対応する HTTP の概念に直接対応しています。さらに、 リクエスト/レスポンスではボディも混乱します。
Headers
Headers インターフェイスでは HTTP を定義できます リクエスト ヘッダー (Request.headers) とレスポンス ヘッダー (Response.headers)。 Headers オブジェクトは、単純な複数の名前と値のペアです:
var content = "Hello World"; var myHeaders = new Headers(); myHeaders.append("Content-Type", "text/plain"); myHeaders.append("Content-Length", content.length.toString()); myHeaders.append("X-Custom-Header", "ProcessThisImmediately");
多次元配列またはオブジェクト リテラルを渡すこともできます:
myHeaders = new Headers({ "Content-Type": "text/plain", "Content-Length": content.length.toString(), "X-Custom-Header": "ProcessThisImmediately", });
さらに、Headers インターフェイスは、設定、削除、その他の API を提供します コンテンツを取得するために使用されます:
console.log(reqHeaders.has("Content-Type")); // true console.log(reqHeaders.has("Set-Cookie")); // false reqHeaders.set("Content-Type", "text/html"); reqHeaders.append("X-Custom-Header", "AnotherValue"); console.log(reqHeaders.get("Content-Length")); // 11 console.log(reqHeaders.getAll("X-Custom-Header")); // ["ProcessThisImmediately", "AnotherValue"] reqHeaders.delete("X-Custom-Header"); console.log(reqHeaders.getAll("X-Custom-Header")); // []
一部の操作は ServiceWorkers でのみ使用されますが、比較的 XHR 自体は、ヘッダーを操作するための非常に便利な API を提供します。
セキュリティ上の理由から、一部のヘッダーフィールドはユーザーエージェントを介してのみ設定できます 実装では、プログラムで設定することはできません: リクエスト ヘッダーの禁止フィールドとレスポンス ヘッダーの禁止フィールド。
不正なHTTPヘッダー属性名が使用されたり、書き込み不可能な属性が書き込まれた場合、ヘッダー 通常、メソッドは TypeError 例外をスローします:
var myResponse = Response.error(); try { myResponse.headers.set("Origin", "http://mybank.com"); } catch(e) { console.log("Cannot pretend to be a bank!"); }
ベスト プラクティスは、次のように、使用前にコンテンツ タイプが正しいかどうかを確認することです:
fetch(myRequest).then(function(response) { if(response.headers.get("content-type") === "application/json") { return response.json().then(function(json) { // process your JSON further }); } else { console.log("Oops, we haven't got JSON!"); } });
ヘッダーはリクエスト要求または応答で送信できるため リクエストで受け取られ、どのパラメータが書き込み可能であるかを指定する Headers オブジェクトには特別なガード属性があります。このプロパティは Web には公開されませんが、どのようなコンテンツを公開できるかに影響します。 ヘッダー オブジェクトが変更されます。
可能な値は次のとおりです:
none: デフォルト
r
equest:从 request 中获得的 headers(Request.headers)只读 request-no-cors:从不同域(Request.mode no-cors)的 request 中获得的 headers 只读 response:从 response 中获得的 headers(Response.headers)只读 immutable:在 ServiceWorkers 中最常用的,所有的 headers 都只读
Request
Request このインターフェイスは、HTTP 経由でリソースをリクエストするためのリクエスト形式を定義します。単純なリクエストは次のように構成されます:
var req = new Request("/index.html"); console.log(req.method); // "GET" console.log(req.url); // "http://example.com/index.html" console.log(req.headers); //请求头
fetch() と同じで、リクエストは 2 番目のオプションのパラメータである、さまざまな設定を制御できる init を受け入れます。 オブジェクト:
var myHeaders = new Headers(); var myInit = { method: 'GET', headers: myHeaders, mode: 'cors', cache: 'default' , credentials: true, body: "image data"}; var myRequest = new Request('flowers.jpg',myInit); fetch(myRequest,myInit) .then(function(response) { return response.blob(); }) .then(function(myBlob) { var objectURL = URL.createObjectURL(myBlob); myImage.src = objectURL; });
mode 属性は、クロスドメイン要求が許可されるかどうか、およびどの応答属性が読み取り可能であるかを決定するために使用されます。モード オプションの属性値:
same-origin: リクエストは同一オリジンポリシーに従います
no-cors: デフォルト値、CDN からのスクリプト、他のドメインからのイメージ、およびその他のいくつかのクロスドメインリソースを許可します (前提条件は メソッドは HEAD、GET、または POST のみです)
cors: クロスドメインが許可され、リクエストは CROS プロトコルに従います
credentials 列挙属性は、ドメイン間で Cookie を取得できるかどうかを決定します。これは XHR と一致します withCredentials フラグも同じですが、値は 3 つだけです。つまり、omit (デフォルト)、same-origin、および include です。
Response
Response インスタンスは fentch() Promise によって処理されます 後で返されるインスタンスは JavaScript 経由で作成することもできますが、実際に役立つのは ServiceWorkers 内でのみです。 responseWith()を使用する場合 メソッドを呼び出し、リクエストを受け入れるためのカスタム応答を提供します:
var myBody = new Blob(); addEventListener('fetch', function(event) { event.respondWith(new Response(myBody, { headers: { "Content-Type" : "text/plain" } }); });
Response() コンストラクターは、応答データ本体と初期化オブジェクト ( Request() によって受け入れられる初期パラメータは似ています。)
最も一般的な応答属性は次のとおりです:
Response.status — 整数(默认值为200) 为response的状态码. Response.statusText — 字符串(默认值为OK),该值与HTTP状态码消息对应. Response.ok — 如上所示, 该属性是来检查response的状态是否在200-299(包括200,299)这个范围内.该属性返回一个Boolean值. Response.headers — 响应头 Response.type — 响应类型,如:basic/ cors /error
Body
Request と Response は両方とも Body インターフェイスを実装しており、どちらもリクエスト プロセス中に伝達されます。 本体。次のいずれかのタイプのインスタンスになります:
ArrayBuffer ArrayBufferView Blob/file URLSearchParams FormData
此外,Request 和 Response 都为他们的body提供了以下方法,这些方法都返回一个Promise对象:
arrayBuffer() blob() json() text() formData()
以上就是XML Http Request最新替代技术—— Fetch 的内容,更多相关内容请关注PHP中文网(www.php.cn)!

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











XML ファイルは PPT で開くことができますか? XML、Extensible Markup Language (Extensible Markup Language) は、データ交換とデータ ストレージで広く使用されている汎用マークアップ言語です。 HTML と比較して、XML はより柔軟であり、独自のタグとデータ構造を定義できるため、データの保存と交換がより便利で統一されます。 PPT (PowerPoint) は、プレゼンテーションを作成するために Microsoft によって開発されたソフトウェアです。包括的な方法を提供します。

Python を使用した XML データのマージと重複排除 XML (eXtensibleMarkupLanguage) は、データの保存と送信に使用されるマークアップ言語です。 XML データを処理するとき、複数の XML ファイルを 1 つにマージしたり、重複データを削除したりする必要がある場合があります。この記事では、Python を使用して XML データのマージと重複排除を実装する方法と、対応するコード例を紹介します。 1. XML データのマージ 複数の XML ファイルがある場合、それらをマージする必要があります。

Python の XML データを CSV 形式に変換する XML (ExtensibleMarkupLanguage) は、データの保存と送信に一般的に使用される拡張可能なマークアップ言語です。 CSV (CommaSeparatedValues) は、データのインポートとエクスポートに一般的に使用されるカンマ区切りのテキスト ファイル形式です。データを処理するとき、分析や処理を容易にするために、XML データを CSV 形式に変換する必要がある場合があります。 Pythonは強力です

Python を使用した XML データのフィルタリングと並べ替えの実装 はじめに: XML は、データをタグと属性の形式で保存する、一般的に使用されるデータ交換形式です。 XML データを処理するとき、多くの場合、データのフィルタリングと並べ替えが必要になります。 Python には、XML データを処理するための便利なツールとライブラリが多数用意されています。この記事では、Python を使用して XML データをフィルタリングおよび並べ替える方法を紹介します。 XML ファイルの読み取り 始める前に、XML ファイルを読み取る必要があります。 Python には XML 処理ライブラリが多数ありますが、

Python は XML と JSON 間の変換を実装します はじめに: 日常の開発プロセスでは、異なる形式間でデータを変換する必要があることがよくあります。 XML と JSON は一般的なデータ交換形式であり、Python ではさまざまなライブラリを使用して XML と JSON の間で変換できます。この記事では、一般的に使用されるいくつかの方法をコード例とともに紹介します。 1. Python で XML を JSON に変換するには、xml.etree.ElementTree モジュールを使用できます。

Python を使用した XML でのエラーと例外の処理 XML は、構造化データの保存と表現に使用される一般的に使用されるデータ形式です。 Python を使用して XML を処理すると、エラーや例外が発生することがあります。この記事では、Python を使用して XML のエラーと例外を処理する方法を紹介し、参考用のサンプル コードをいくつか示します。 Try-Except ステートメントを使用して XML 解析エラーを捕捉する Python を使用して XML を解析すると、時々、次のようなエラーが発生することがあります。

Python は XML 内の特殊文字とエスケープ シーケンスを解析します XML (eXtensibleMarkupLanguage) は、異なるシステム間でデータを転送および保存するために一般的に使用されるデータ交換形式です。 XML ファイルを処理する場合、特殊文字やエスケープ シーケンスが含まれる状況に遭遇することが多く、これにより解析エラーやデータの誤解が生じる可能性があります。したがって、Python を使用して XML ファイルを解析する場合は、これらの特殊文字とエスケープ シーケンスの処理方法を理解する必要があります。 1. 特殊文字と

C# 開発で XML および JSON データ形式を処理する方法には、特定のコード サンプルが必要です。現代のソフトウェア開発では、XML と JSON の 2 つのデータ形式が広く使用されています。 XML (Extensible Markup Language) はデータの保存と送信に使用されるマークアップ言語であり、JSON (JavaScript Object Notation) は軽量のデータ交換形式です。 C# 開発では、XML と JSON データの処理と操作が必要になることがよくありますが、この記事では、C# を使用してこれら 2 つのデータ形式を処理し、添付する方法に焦点を当てます。
