ホームページ ウェブフロントエンド jsチュートリアル jQuery AJAX コールバック関数、これは問題を指します_javascript のヒント

jQuery AJAX コールバック関数、これは問題を指します_javascript のヒント

May 16, 2016 pm 06:34 PM
ajax jquery 折り返し電話

たとえば、this を含むオブジェクトがグローバル スコープで呼び出された場合、現在のオブジェクトの this は window を指します。 this のポイントを自分の希望に合わせるために、JavaScript では this のポイントを変更するメソッドが 2 つ用意されています。それは call と apply です。もちろん、これを実現するためにクロージャを使用するメソッドもあります。この記事では、例を挙げてこれらの問題を説明します。

まずデモ コードを見てみましょう。このコードはデモのみを目的としており、実用的な意味はありません。

コードをコピー コードは次のとおりです:

//A ソケット接続実質的な意味はありません Object
varソケット =
{
connect: function(host, port)
{
alert('接続中のソケットサーバー,host:' host ',port:' port) ;
}
};
//connect メソッドも AJAX コールバック関数として呼び出されます
function classIm()
{
this.ホスト = '192.168.1.28 ';
this.port = '8080';
this.connect = function(data)
{
socket.connect(this.host, this.port);
};
}
//インスタント メッセージング クラスをインスタンス化します
var IM = new classIm();
//ここでは、ソケット接続を開くために、まず、ユーザーの WEB ログインが成功したことを WEB を通じて知る必要があります。
$.get('CheckWebLogin.aspx', IM.connect);
上記の例を実行すると、ポップアップ ホストとポートが表示されます。これは、コールバック関数の this が IM オブジェクトを指しているのではなく、jQuery の AJAX 設定オブジェクトである ajaxSettings を指しているためです。 jQuery 内部では、実行する受信コールバック関数の代わりに s.success が使用され、success の呼び出しオブジェクトは s です。これは、以下の ajaxSettings オブジェクトの略称です。

ajaxSettings:
{
url: location.href、
global: true、
type: "GET"、
contentType: "application/x-www-form -urlencoded",
processData: true,
async: true
}

これを証明するには、次のようにコードを変更してテストします。URL が表示されます。 , global、type、contentType、その他のオブジェクトの属性名:
コードをコピー コードは次のとおりです:

this .connect = function(data)
{
for (this の var key)
{
alert(key);
}
}


問題を理解したので、それを解決する方法を見つけてみましょう。実際、私たちの目的は、AJAX コールバック関数コードの this が、socket.connect(this.host, this.port) が classIm のインスタンス オブジェクト IM を指していること、または、socket.connect() メソッドが正しい値を取得できることを期待することです。パラメータ値。 AJAX コールバック関数の期待どおりの実行結果を取得するために、次のメソッドを分析しました。

メソッド 1

オブジェクトの正しい参照を、代わりに直接渡します。このポインタ、またはオブジェクト転送と呼ばれます。これは最も一般的なアプローチです。つまり、クラスがインスタンス化されるときに変数を使用して現在のオブジェクトへの参照を保存し、この変数を使用する代わりに後続のメソッドでこの変数を直接使用します。注: このメソッドは、実際にこれが指すものを変更するわけではありません。デモ コードは次のとおりです。前後の 2 つのコードの違いにも注目してください。コードの異なる部分も強調表示します。
コードをコピー コードは次のとおりです:

varソケット =
{
connect: function(host, port)
{
alert('接続中のソケットサーバー,host:' host ',port:' port);
}
}; )
{
var self = this;
this.host = '192.168.1.28';
this.connect = function(data); >{
socket.connect(self.host, self.port);
}
var IM = new classIm(); 、IM.connect);



方法 2

これの方向を実際に変更するには、apply と Closure を使用します。次のメソッドは、関数が呼び出されたときに this オブジェクトを一時変数 _method に格納し、クロージャを使用してそれを返された関数オブジェクトに渡します。返された関数では、apply を使用して呼び出し元オブジェクトの this オブジェクトを置き換えます。ターゲットオブジェクト thisObj 。このメソッドは多くの JavaScript フレームワークで実践されており、以下の Function プロトタイプ メソッドはプロトタイプ フレームワークを私が簡略化したものです。最初にApplyメソッドをFunctionプロトタイプに追加したことに注意してください。このApplyは、私がカスタマイズしたものではありません。必要に応じて、別の名前を付けることができます。


コードをコピー
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

jQueryでPUTリクエストメソッドを使用するにはどうすればよいですか? jQueryでPUTリクエストメソッドを使用するにはどうすればよいですか? Feb 28, 2024 pm 03:12 PM

jQueryでPUTリクエストメソッドを使用するにはどうすればよいですか? jQuery で PUT リクエストを送信する方法は、他のタイプのリクエストを送信する方法と似ていますが、いくつかの詳細とパラメータ設定に注意する必要があります。 PUT リクエストは通常​​、データベース内のデータの更新やサーバー上のファイルの更新など、リソースを更新するために使用されます。以下は、jQuery の PUT リクエスト メソッドを使用した具体的なコード例です。まず、jQuery ライブラリ ファイルが含まれていることを確認してから、$.ajax({u

PHP と Ajax: オートコンプリート提案エンジンの構築 PHP と Ajax: オートコンプリート提案エンジンの構築 Jun 02, 2024 pm 08:39 PM

PHP と Ajax を使用してオートコンプリート候補エンジンを構築します。 サーバー側スクリプト: Ajax リクエストを処理し、候補を返します (autocomplete.php)。クライアント スクリプト: Ajax リクエストを送信し、提案を表示します (autocomplete.js)。実際のケース: HTML ページにスクリプトを組み込み、検索入力要素の識別子を指定します。

Ajaxを使用してPHPメソッドから変数を取得するにはどうすればよいですか? Ajaxを使用してPHPメソッドから変数を取得するにはどうすればよいですか? Mar 09, 2024 pm 05:36 PM

Ajax を使用して PHP メソッドから変数を取得することは、Web 開発では一般的なシナリオであり、Ajax を使用すると、データを更新せずにページを動的に取得できます。この記事では、Ajax を使用して PHP メソッドから変数を取得する方法と、具体的なコード例を紹介します。まず、Ajax リクエストを処理し、必要な変数を返すための PHP ファイルを作成する必要があります。以下は、単純な PHP ファイル getData.php のサンプル コードです。

jQuery のヒント: ページ上のすべての a タグのテキストをすばやく変更する jQuery のヒント: ページ上のすべての a タグのテキストをすばやく変更する Feb 28, 2024 pm 09:06 PM

タイトル: jQuery ヒント: ページ上のすべての a タグのテキストをすばやく変更する Web 開発では、ページ上の要素を変更したり操作したりする必要がよくあります。 jQuery を使用する場合、ページ内のすべての a タグのテキスト コンテンツを一度に変更する必要がある場合があります。これにより、時間と労力を節約できます。以下では、jQuery を使用してページ上のすべての a タグのテキストをすばやく変更する方法と、具体的なコード例を紹介します。まず、jQuery ライブラリ ファイルを導入し、次のコードがページに導入されていることを確認する必要があります: &lt

jQuery を使用してすべての a タグのテキスト コンテンツを変更する jQuery を使用してすべての a タグのテキスト コンテンツを変更する Feb 28, 2024 pm 05:42 PM

タイトル: jQuery を使用して、すべての a タグのテキスト コンテンツを変更します。 jQuery は、DOM 操作を処理するために広く使用されている人気のある JavaScript ライブラリです。 Web 開発では、ページ上のリンク タグ (タグ) のテキスト コンテンツを変更する必要が生じることがよくあります。この記事では、この目標を達成するために jQuery を使用する方法を説明し、具体的なコード例を示します。まず、jQuery ライブラリをページに導入する必要があります。 HTML ファイルに次のコードを追加します。

PHP と Ajax: 動的に読み込まれるコンテンツを作成するためのソリューション PHP と Ajax: 動的に読み込まれるコンテンツを作成するためのソリューション Jun 06, 2024 pm 01:12 PM

Ajax (非同期 JavaScript および XML) を使用すると、ページをリロードせずに動的コンテンツを追加できます。 PHP と Ajax を使用すると、製品リストを動的にロードできます。HTML はコンテナ要素を含むページを作成し、Ajax リクエストはロード後に要素にデータを追加します。 JavaScript は Ajax を使用して XMLHttpRequest を通じてサーバーにリクエストを送信し、サーバーから JSON 形式で商品データを取得します。 PHP は MySQL を使用してデータベースから製品データをクエリし、それを JSON 形式にエンコードします。 JavaScript は JSON データを解析し、ページ コンテナーに表示します。ボタンをクリックすると、製品リストをロードするための Ajax リクエストがトリガーされます。

jQuery における eq の役割と応用シナリオを理解する jQuery における eq の役割と応用シナリオを理解する Feb 28, 2024 pm 01:15 PM

jQuery は、Web ページでの DOM 操作やイベント処理を処理するために広く使用されている人気のある JavaScript ライブラリです。 jQueryではeq()メソッドを利用して指定したインデックス位置の要素を選択しますが、具体的な使い方と応用シーンは以下の通りです。 jQuery では、 eq() メソッドは、指定されたインデックス位置にある要素を選択します。インデックス位置は 0 からカウントされます。つまり、最初の要素のインデックスは 0、2 番目の要素のインデックスは 1 などとなります。 eq() メソッドの構文は次のとおりです。 $("s

Golangでデータベースコールバック関数を使用するにはどうすればよいですか? Golangでデータベースコールバック関数を使用するにはどうすればよいですか? Jun 03, 2024 pm 02:20 PM

Golang でデータベース コールバック関数を使用すると、次のことを実現できます。 指定されたデータベース操作が完了した後にカスタム コードを実行します。追加のコードを記述せずに、個別の関数を通じてカスタム動作を追加します。コールバック関数は、挿入、更新、削除、クエリ操作に使用できます。コールバック関数を使用するには、sql.Exec、sql.QueryRow、または sql.Query 関数を使用する必要があります。

See all articles