programing

$(이것은) AJAX 성공 내부에서 작동하지 않음

megabox 2023. 11. 5. 11:09
반응형

$(이것은) AJAX 성공 내부에서 작동하지 않음

나는 $(이것)을 사용할 수 있도록 클릭 시 사용하는 오래된 코드를 변경하려고 합니다.문제는 성공 내부에서 $(이것은) 작동하지 않는다는 것입니다.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이벤트 핸들러가 바인딩된 요소가 아닌 Ajax 호출의 개체입니다.자바스크립트에서 작동하는 방법에 대해 자세히 알아봅니다.


해결책

ES2015+를 사용할 수 있다면 화살표 기능을 사용하는 것이 가장 간단한 옵션일 것입니다.

$.ajax({
    //...
    success: (json) => {
         // `this` refers to whatever `this` refers to outside the function
    }
});

옵션을 설정할 수 있습니다.

이 개체는 모든 Ajax 관련 콜백의 컨텍스트가 됩니다.기본적으로 컨텍스트는 호출에 사용된 ajax 설정을 나타내는 개체입니다($.ajaxSettings전달된 설정과 병합됨$.ajax). (...)

$.ajax({
    //...
    context: this,
    success: function(json) {
         // `this` refers to the value of `context`
    }
});

또는 사용:

$.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(".custom-filter-options .sbHolder ul li a").each(function () {
    var myStr = jQuery(this).text();
    var myArr = myStr.split(" (");
     url = 'your url'; // New Code
            data = myArr[0];
                try {
                    jQuery.ajax({
                        url : url,
                        context: this,
                        type : 'post',
                        data : data,
                        success : function(data) {
            if(data){
                  jQuery(this).html(data);
            }else{
                  jQuery(this).html(myArr[0]);
            }
                        }
                    });
                } catch (e) {
                } 


});

언급URL : https://stackoverflow.com/questions/6394812/this-inside-of-ajax-success-not-working

반응형