jQueryのないバニラ・アジャックスのガイド
キーテイクアウト
-
非同期JavaScriptとXMLの略であるAjaxは、部分的なページの更新を可能にし、完全なページの更新の必要性を減らし、より多くの流動的なユーザーエクスペリエンスを可能にします。 AJAXリクエストの基本的な解剖学には、HTTP要求に必要なクラスのインスタンスを作成し、HTTPリクエストメソッドとページのURLを指定し、リクエストを送信します。
- jQueryはAjaxリクエストを簡素化できますが、必ずしも必要ではありません。 Vanilla JavaScriptのAjax APIは大幅な改善を遂げており、XMLHTTPREQUEST仕様は現在、標準の観点から単一のエンティティとして扱われ、コミュニティが1つの標準に固執することをコミットしていることを示しています。 Vanilla Ajaxは、柔軟でモダンなフロントエンドAPIを提供します。リクエストヘッダーを設定し、サーバーから予想される応答のタイプを指定し、ブラウザキャッシュをバストすることができます。 Ajaxはかつて複雑なプロセスでしたが、より簡単でユーザーフレンドリーになりました。
- 非同期JavaScriptとXMLの略であるAjaxは、部分ページの更新を行うメカニズムです。完全な更新の必要性を回避しながら、サーバーから来るデータを使用してページのセクションを更新できます。この方法で部分的な更新を行うことは、流動的なユーザーエクスペリエンスを作成するのに効果的であり、サーバー上の負荷を減らすことができます。
- これは、基本的なAJAXリクエストの解剖学です:
ここでは、サーバーにHTTP要求を行うために必要なクラスのインスタンスを作成しています。次に、HTTPリクエストメソッドを最初のパラメーターとして指定し、2番目のパラメーターとしてリクエストしているページのURLを指定して、オープンメソッドを呼び出します。最後に、nullをパラメーターとして渡す送信方法を呼び出します。リクエスト後(ここではGETを使用しています)の場合、このパラメーターにはリクエストで送信するデータを含める必要があります。
そしてこれがサーバーからの応答に対処する方法です:
var xhr = new XMLHttpRequest(); xhr.open('GET', 'send-ajax-data.php'); xhr.send(null);
readedStateChangeは非同期です。つまり、いつでも呼び出されます。これらのタイプの関数はコールバックです。これは、処理が終了すると呼ばれるものです。この場合、サーバーで処理が行われています。
ajaxの基本についてもっと知りたい人のために、MDNネットワークには良いガイドがあります。jqueryにjqueryへではありませんか?
xhr.onreadystatechange = function () { var DONE = 4; // readyState 4 means the request is done. var OK = 200; // status 200 is a successful return. if (xhr.readyState === DONE) { if (xhr.status === OK) { console.log(xhr.responseText); // 'This is the returned text.' } else { console.log('Error: ' + xhr.status); // An error occurred during the request. } } };
jQueryを使用して、スニペット全体を
に凝縮できます
それはいいです。そして実際、あなたの真にあなたを含む多くの人にとって、jQueryはAjaxに関しては事実上の基準になりました。しかし、あなたは何を知っていますか?これが事実である必要はありません。 jQueryは醜いDOM APIを回避するために存在します。しかし、それは本当に
ugいですか?または理解できない?この記事の残りの部分では、Vanilla JavaScriptのAJAX APIに加えられた改善を調査したいと思います。仕様全体はW3Cにあります。この仕様について私にぶつかるのは名前です。 「xmlhttprequestレベル2」ではなく、「xmlhttprequestレベル1」です。これは、2つの仕様間の2011年の合併の結果です。今後、それは標準の観点から単一のエンティティとして扱われ、生きている標準はXMLHTTPREQUESTと呼ばれます。これは、コミュニティが1つの基準に固執するというコミットメントがあることを示しています。これは、jQueryから解放したい開発者にとって良いニュースを意味することを意味します。
では、始めましょう…
セットアップ
この記事では、バックエンドでnode.jsを使用しています。はい、ブラウザとサーバーにJavaScriptがあります。 node.jsのバックエンドは無駄がないので、Githubにデモ全体をダウンロードしてフォローすることをお勧めします。これがサーバー上にあるものの肉とジャガイモです:これにより、リクエストURLをチェックして、アプリの応答方法を決定します。リクエストがScriptsディレクトリから来た場合、適切なファイルは、コンテンツタイプのアプリケーション/JavaScriptで提供されます。それ以外の場合、リクエストのヘッダー付きのXリクエストされたヘッダーがXMLHTTPREQUESTに設定されている場合、AJAXリクエストを扱っていることがわかり、適切に対応できます。そして、これらのどちらもそうでない場合、ファイルビュー/index.htmlが提供されます。
サーバーからのAJAX応答に飛び込むと、コメントされたセクションを展開します。 node.jsでは、レンダリングとhttphandlerで重く塗りつぶしをしなければなりませんでした:var xhr = new XMLHttpRequest(); xhr.open('GET', 'send-ajax-data.php'); xhr.send(null);
レンダリング関数は、要求されたファイルの内容を非同期に読み取ります。 httphandler関数への参照が渡され、コールバックとして実行されます。 httphandler関数は、エラーオブジェクトの存在をチェックします(たとえば、要求されたファイルが開けられなかった場合、これは存在します)。すべてを提供することは良いことで、適切なHTTPステータスコードとコンテンツタイプを使用して、ファイルのコンテンツを提供します。
APIのテスト
xhr.onreadystatechange = function () { var DONE = 4; // readyState 4 means the request is done. var OK = 200; // status 200 is a successful return. if (xhr.readyState === DONE) { if (xhr.status === OK) { console.log(xhr.responseText); // 'This is the returned text.' } else { console.log('Error: ' + xhr.status); // An error occurred during the request. } } };
これらは、アプリが正しいコンテンツタイプとHTTPステータスコードで異なるリクエストに応答することを保証します。依存関係をインストールしたら、NPMテストを使用してコマンドからこれらのテストを実行できます。 インターフェイス
さあ、HTMLで構築しているユーザーインターフェイスを見てみましょう。
$.ajax({ url: 'send-ajax-data.php', }) .done(function(res) { console.log(res); }) .fail(function(err) { console.log('Error: ' + err.status); });
onreadyState vs onload
標準的なajaxの本を調べた場合、どこにでもonedeadtateを見つけることができます。このコールバック関数には、ネストされたIFと多くの綿毛が完備されており、頭の上部から覚えておくのが難しくなります。 onreadystateとonloadイベントを頭から頭に向けましょう。
var xhr = new XMLHttpRequest(); xhr.open('GET', 'send-ajax-data.php'); xhr.send(null);
これはコンソールの出力です:
onedeadedStateイベントは、あちこちで発砲します。それは、各リクエストの先頭に、最後に発砲します。しかし、仕様によれば、オンロードイベントは、リクエストがに成功した場合にのみ発射されます。したがって、オンロードイベントは、数秒で有効に使用できる最新のAPIです。 OnreadedStateイベントは、逆方向に互換性があります。ただし、オンロードイベントは選択のツールである必要があります。オンロードイベントはjQueryの成功コールバックのように見えます、そうではありませんか?
5 lbのダンベルを脇に置いて、腕のカールに移動する時が来ました。リクエストヘッダーの設定
jQueryは、バックエンドテクノロジーがAJAXリクエストであることを知っているため、カバーの下にリクエストヘッダーを設定します。一般に、バックエンドは、適切な応答を送信する限り、Get Requestがどこから来るかを気にしません。これは、同じWeb APIでAJAXとHTMLをサポートしたい場合に役立ちます。それでは、バニラajaxでリクエストヘッダーを設定する方法を見てみましょう:
これで、node.js:
をチェックインすることができますxhr.onreadystatechange = function () { var DONE = 4; // readyState 4 means the request is done. var OK = 200; // status 200 is a successful return. if (xhr.readyState === DONE) { if (xhr.status === OK) { console.log(xhr.responseText); // 'This is the returned text.' } else { console.log('Error: ' + xhr.status); // An error occurred during the request. } } };
ご覧のとおり、Vanilla Ajaxは柔軟でモダンなフロントエンドAPIです。リクエストヘッダーを使用できるアイデアがたくさんあり、そのうちの1つはバージョン化です。たとえば、このWeb APIの複数のバージョンをサポートしたいとします。これは、URLを壊したくない場合に役立ち、代わりにクライアントが必要なバージョンを選択できるメカニズムを提供します。次のように、リクエストヘッダーを設定できます
$.ajax({ url: 'send-ajax-data.php', }) .done(function(res) { console.log(res); }) .fail(function(err) { console.log('Error: ' + err.status); });
を試してください
// app.js var app = http.createServer(function (req, res) { if (req.url.indexOf('/scripts/') >= 0) { render(req.url.slice(1), 'application/javascript', httpHandler); } else if (req.headers['x-requested-with'] === 'XMLHttpRequest') { // Send Ajax response } else { render('views/index.html', 'text/html', httpHandler); } });
私たちは家のストレッチにいて、汗をかいていません!あなたは疑問に思っているかもしれません、Ajaxについて他に何が知っているのでしょうか?さて、いくつかのきちんとしたトリックはどうですか。
// app.js function render(path, contentType, fn) { fs.readFile(__dirname + '/' + path, 'utf-8', function (err, str) { fn(err, str, contentType); }); } var httpHandler = function (err, str, contentType) { if (err) { res.writeHead(500, {'Content-Type': 'text/plain'}); res.end('An error has occured: ' + err.message); } else { res.writeHead(200, {'Content-Type': contentType}); res.end(str); } };
応答タイプ
私が扱っているのに、私が扱っているのに、なぜ古いJSONであるのに、応答テキストにサーバーの応答が含まれる理由を疑問に思うかもしれません。結局のところ、それは私が適切なレポンサイタイプを設定しなかったからです。このajax属性は、サーバーにどのような種類の応答が期待されるかをフロントエンドAPIに伝えるのに最適です。それでは、これを有効にしてみましょう:
var xhr = new XMLHttpRequest(); xhr.open('GET', 'send-ajax-data.php'); xhr.send(null);
すごい、私がJSONに解析する必要があるプレーンテキストを送り返す代わりに、APIに何を期待するかを伝えることができます。この機能は、ほとんどすべての最新の主要なブラウザで利用できます。もちろん、jQueryはこのタイプの変換を自動的に行います。しかし、私たちがプレーンJavaScriptで同じことをする便利な方法を持っているのは素晴らしいことではありませんか? Vanilla Ajaxは、XMLを含む他の多くの応答タイプをサポートしています。
悲しいことに、インターネットエクスプローラーでは、ストーリーはそれほど素晴らしいものではありません。 IE 11の時点で、チームはまだXHR.ResponsEtype =「JSON」のサポートを追加していません。この機能は、Microsoft Edgeに到着することです。しかし、このバグは、執筆時点でほぼ2年間傑出しています。私の推測では、Microsoftの人々がブラウザを刷新するのに苦労しています。 Microsoft Edge、別名Project Spartanが約束を築くことを願っています。悲しいかな、この問題を回避する必要がある場合は、
キャッシュバスト
xhr.onreadystatechange = function () { var DONE = 4; // readyState 4 means the request is done. var OK = 200; // status 200 is a successful return. if (xhr.readyState === DONE) { if (xhr.status === OK) { console.log(xhr.responseText); // 'This is the returned text.' } else { console.log('Error: ' + xhr.status); // An error occurred during the request. } } };
ブラウザの1つの機能は、Ajaxリクエストのキャッシュ機能です。たとえば、インターネットエクスプローラーは、デフォルトでこれを行います。私はかつて何時間も苦労して、なぜ私のajaxが機能していなかったのかを理解しようとしました。幸いなことに、jQueryはデフォルトでブラウザキャッシュをバストします。まあ、あなたもプレーンなajaxでもできます、そしてそれはかなり簡単です:
jQueryドキュメントごとに、リクエストの最後にタイムスタンプクエリ文字列を追加するだけです。これにより、リクエストはややユニークになり、ブラウザのキャッシュをバストします。 http ajaxリクエストを発射すると、これがどのように見えるかを見ることができます:
$.ajax({ url: 'send-ajax-data.php', }) .done(function(res) { console.log(res); }) .fail(function(err) { console.log('Error: ' + err.status); });
tada!すべてドラマがない。
結論
300lbベンチプレスのバニラ・アジャックスを楽しんだことを願っています。しばらくすると、Ajaxは恐ろしい獣でしたが、それ以上はありませんでした。実際、私たちは松葉杖、ahem shackles、jqueryのすべての基本をすべて取り上げました。
Ajaxの呼び出しを行う簡潔な方法を残します:
そしてこれが応答がどのように見えるかです:
// app.js var app = http.createServer(function (req, res) { if (req.url.indexOf('/scripts/') >= 0) { render(req.url.slice(1), 'application/javascript', httpHandler); } else if (req.headers['x-requested-with'] === 'XMLHttpRequest') { // Send Ajax response } else { render('views/index.html', 'text/html', httpHandler); } });
忘れないでください、GitHubでデモ全体を見つけることができます。コメントでjQueryの有無にかかわらず、あなたの考えを聞いて歓迎します。
バニラ・アジャックスとは何ですか?jquery ajaxとはどうなりますか?vanilla ajaxは、jQueryライブラリに頼らずに、非同期Webアプリケーションを作成するためのネイティブJavaScriptの使用を指します。 JQuery Ajaxは、Ajaxを処理するための単純化されたクロスブラウザー互換性のある方法を提供しますが、Vanilla Ajaxは、基礎となるプロセスのより多くの制御と理解を提供します。 jqueryのような外部ライブラリへの依存関係を減らしたい場合にも最適なオプションです。
vanilla javascriptを使用して基本的なAjax要求を作成するにはどうすればよいですか?
Vanilla JavaScriptを使用して基本的なAJAX要求を作成するには、XMLHTTPREQUESTオブジェクトを使用します。このオブジェクトを使用すると、HTTPまたはHTTPSリクエストをWebサーバーに送信し、サーバーの応答データをスクリプトにロードすることができます。簡単な例を次に示します:
var xhr = new xmlhttprequest();
xhr.open( "get"、 'https://api.example.com/data'、true);
> xhr.oneadystatechange = function(){
if(xhr.readystate == 4 && xhr.status == 200)
console.log(json.parse(xhr.responsetext));
}
xhr.send();
vanilla ajax?
のエラーを処理するにはどうすればよいですか? Vanilla Ajaxでのエラー処理は、XmlhttpRequestオブジェクトのOnerrorイベントハンドラーを使用して実行できます。このイベントは、AJAXリクエストを行ったときにエラーが発生したときにトリガーされます。例は次のとおりです。
var xhr = new xmlhttprequest();
xhr.open( "get"、 'https://api.example.com/data'、true);
xhr .Onerror = function(){
};
xhr.send();
POSTリクエストにVanilla Ajaxを使用できますか? XMLHTTPREQUESTオブジェクトのオープンメソッドは、最初の引数としてHTTPメソッドを受け入れます。したがって、「取得」を「投稿」に置き換えることができます。リクエストを送信する前に、SetRequestheaderメソッドを使用してコンテンツタイプのヘッダーを設定することを忘れないでください。リクエスト、JSONオブジェクトをストリング化し、リクエストの本文として送信する必要があります。また、コンテンツタイプのヘッダーをApplication/JSONに設定します。例は次のとおりです。
var xhr = new xmlhttprequest();
xhr.open( "post"、 'https://api.example.com/data'、true);xhr .setRequestHeader( "Content-Type"、 "Application/json");
xhr.send(json.stringify({key: "value"})) > XMLHTTPREQUESTオブジェクトのABORTメソッドを呼び出すと、AJAXリクエストをキャンセルできます。これにより、リクエストはすぐに終了します。vanilla javascriptを使用して同期Ajaxリクエストを作成できますか? 。同期リクエストを作成するには、オープンメソッドの3番目の引数としてfalseを渡します。 xmlhttprequestオブジェクトのonprogressイベントハンドラー。このイベントは、現在の進捗情報を提供して複数回トリガーされています。
他のJavaScriptライブラリまたはフレームワークでVanilla Ajaxを使用できますか? 。ネイティブのJavaScript機能であり、外部ライブラリに依存しません。
バニラajaxはすべてのブラウザーでサポートされていますか?
vanilla ajaxは、xmlhttprequestオブジェクトを使用して、すべての最新のブラウザによってサポートされています。ただし、インターネットエクスプローラーの古いバージョン(すなわち6以前)は、AjaxにActiveXオブジェクトを使用します。
以上がjQueryのないバニラ・アジャックスのガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホット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)

ホットトピック











フロントエンドのサーマルペーパーチケット印刷のためのよくある質問とソリューションフロントエンド開発におけるチケット印刷は、一般的な要件です。しかし、多くの開発者が実装しています...

JavaScriptは現代のWeb開発の基礎であり、その主な機能には、イベント駆動型のプログラミング、動的コンテンツ生成、非同期プログラミングが含まれます。 1)イベント駆動型プログラミングにより、Webページはユーザー操作に応じて動的に変更できます。 2)動的コンテンツ生成により、条件に応じてページコンテンツを調整できます。 3)非同期プログラミングにより、ユーザーインターフェイスがブロックされないようにします。 JavaScriptは、Webインタラクション、シングルページアプリケーション、サーバー側の開発で広く使用されており、ユーザーエクスペリエンスとクロスプラットフォーム開発の柔軟性を大幅に改善しています。

スキルや業界のニーズに応じて、PythonおよびJavaScript開発者には絶対的な給与はありません。 1. Pythonは、データサイエンスと機械学習でさらに支払われる場合があります。 2。JavaScriptは、フロントエンドとフルスタックの開発に大きな需要があり、その給与もかなりです。 3。影響要因には、経験、地理的位置、会社の規模、特定のスキルが含まれます。

この記事の視差スクロールと要素のアニメーション効果の実現に関する議論では、Shiseidoの公式ウェブサイト(https://www.shisido.co.co.jp/sb/wonderland/)と同様の達成方法について説明します。

JavaScriptの最新トレンドには、TypeScriptの台頭、最新のフレームワークとライブラリの人気、WebAssemblyの適用が含まれます。将来の見通しは、より強力なタイプシステム、サーバー側のJavaScriptの開発、人工知能と機械学習の拡大、およびIoTおよびEDGEコンピューティングの可能性をカバーしています。

同じIDを持つ配列要素をJavaScriptの1つのオブジェクトにマージする方法は?データを処理するとき、私たちはしばしば同じIDを持つ必要性に遭遇します...

さまざまなJavaScriptエンジンは、各エンジンの実装原則と最適化戦略が異なるため、JavaScriptコードを解析および実行するときに異なる効果をもたらします。 1。語彙分析:ソースコードを語彙ユニットに変換します。 2。文法分析:抽象的な構文ツリーを生成します。 3。最適化とコンパイル:JITコンパイラを介してマシンコードを生成します。 4。実行:マシンコードを実行します。 V8エンジンはインスタントコンピレーションと非表示クラスを通じて最適化され、Spidermonkeyはタイプ推論システムを使用して、同じコードで異なるパフォーマンスパフォーマンスをもたらします。

フロントエンドのVSCodeと同様に、パネルドラッグアンドドロップ調整機能の実装を調べます。フロントエンド開発では、VSCODEと同様のVSCODEを実装する方法...
