[解決済み] AJAXサクセスの中の$(this)が機能しない
2022-10-07 15:13:56
質問
onclickを使用する古いコードを変更し、$(this)を使用できるようにしようとしています。問題は、$(this)が成功の内部で動作していないことです。それをvarとして設定することなく、これを行うための方法はありますか?
$('.addToCart').click(function() {
$.ajax({
url: 'cart/update',
type: 'post',
data: 'product_id=' + $(this).attr("data-id"),
dataType: 'json',
success: function(json) {
if (json['success']) {
$(this).addClass("test");
}
}
});
});
どのように解決するのですか?
問題点
コールバックの内部で
this
を参照しています。
jqXHR
オブジェクトを指し、イベントハンドラがバインドされていた要素ではありません。
の詳細については
this
が JavaScript でどのように動作するかについては
.
ソリューション
ES2015+ が利用可能な場合、ES2015+ に対応した 矢印関数 を使うのが最もシンプルな方法でしょう。
$.ajax({
//...
success: (json) => {
// `this` refers to whatever `this` refers to outside the function
}
});
を設定することができます。
context
オプション
:
このオブジェクトは、すべてのAjax関連のコールバックのコンテキストにされます。デフォルトでは、コンテキストは呼び出しで使用されるAjaxの設定を表すオブジェクト(
$.ajaxSettings
に渡された設定とマージされたものです。$.ajax
). (...)
$.ajax({
//...
context: this,
success: function(json) {
// `this` refers to the value of `context`
}
});
または
$.proxy
:
$.ajax({
//...
success: $.proxy(function(json) {
// `this` refers to the second argument of `$.proxy`
}, this)
});
の値への参照を保持するか
this
の値への参照をコールバックの外部に保持する。
var element = this;
$.ajax({
//...
success: function(json) {
// `this` refers to the jQXHR object
// use `element` to refer to the DOM element
// or `$(element)` to refer to the jQuery object
}
});
関連
関連
-
[解決済み] jQueryのpreventDefault()が発動しない
-
[解決済み] 私のJavaScriptコードは "No 'Access-Control-Allow-Origin' header is present on requested resource "というエラーを受け取りますが、Postmanはそうならないのはなぜですか?
-
[解決済み] セレクタの子を取得する方法は?
-
[解決済み] jQueryを使ったAjaxリクエストの中断
-
[解決済み] jQuery Ajax呼び出し後のリダイレクトリクエストを管理する方法
-
[解決済み] jQuery AJAX送信フォーム
-
[解決済み] Ajaxリクエストが200 OKを返すが、successではなくerrorイベントが発生する
-
[解決済み] jQueryでtextareaの値を設定する
-
[解決済み] val()を使ってselectの値を設定しても、jqueryのchangeイベントが発生しないのはなぜですか?
-
[解決済み] jQueryのajax関数におけるcontentTypeとdataTypeの違いについて
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Uncaught SyntaxError: 予期しない入力の終了
-
[解決済み] jquery - is not a function エラー
-
[解決済み] jest.fn()の値はモック関数またはスパイである必要があります。
-
[解決済み] jQuery 複数のイベントで同じ関数を起動する
-
[解決済み] 複数のクラスを削除する(jQuery)
-
[解決済み] Twitter Bootstrapのモーダルクローズに関数をバインドする
-
[解決済み] val()を使ってselectの値を設定しても、jqueryのchangeイベントが発生しないのはなぜですか?
-
[解決済み] jQuery / JavaScriptでJSONデータをパースする方法は?
-
[解決済み] jQuery append() - 追記された要素を返す
-
[解決済み] Jqueryのコードはヘッダーとフッターのどちらに入れるべきですか?