sourcetip

Ajax jquery 성공 범위

fileupload 2023. 10. 5. 23:28
반응형

Ajax jquery 성공 범위

아약스에게 전화를 걸어왔습니다doop.php.

    function doop(){
        var old = $(this).siblings('.old').html();
        var new = $(this).siblings('.new').val();

        $.ajax({
            url: 'doop.php',
            type: 'POST',
            data: 'before=' + old + '&after=' + new,
            success: function(resp) {
                if(resp == 1) {
                    $(this).siblings('.old').html(new);
                }
            }
        });

        return false;
    }

내 문제는.$(this).siblings('.old').html(new);라인이 원래 해야 할 일을 하지 않고 있습니다.

고마워요..도움이 되는 모든 의견/answers들이 투표에 부쳐집니다.

업데이트: 문제의 절반이 범위였던 것 같습니다(그것을 명확히 하는데 도움이 된 답변 감사합니다). 하지만 나머지 절반은 동기식으로 ajax를 사용하려고 합니다.새 게시물을 만들었습니다.

http://api.jquery.com/jQuery.ajax/ 에서와 같은 컨텍스트 설정을 사용해야 합니다.

function doop(){
    var old = $(this).siblings('.old').html();
    var newValue = $(this).siblings('.new').val();

    $.ajax({
        url: 'doop.php',
        type: 'POST',
        context: this,
        data: 'before=' + old + '&after=' + newValue,
        success: function(resp) {
            if(resp == 1) {
                $(this).siblings('.old').html(newValue);
            }
        }
    });

    return false;
}

"이것"은 성공 범위로 옮겨지며 예상대로 작동합니다.

일단은new는 유보어입니다.해당 변수의 이름을 변경해야 합니다.

질문에 대답하려면 예, 저장해야 합니다.this성공 콜백 외부의 변수에서 성공 핸들러 코드 내부에 참조합니다.

var that = this;
$.ajax({
    // ...
    success: function(resp) {
        if(resp == 1) {
            $(that).siblings('.old').html($new);
        }
    }
})

이것을 클로저(closure)라고 합니다.

this실행 함수가 적용된 개체에 바인딩됩니다.일부 AJAX 응답 개체일 수도 있고 전역 개체일 수도 있습니다.window, 또는 다른 것(의 구현에 관한 depending)$.ajax.

$.ajax call을 입력하기 전에 $(이것을) 변수에 캡처한 다음 $.ajax call에 매개 변수로 전달해야 합니까?아니면 익명 성공 기능으로 전달해야 합니까?문제가 해결된다면 $.ajax에게 어디로 전달해야 합니까?

고객의 가치를 파악할 수 있는 방법이 필요합니다.this정의하기 전에success기능.폐쇄를 만드는 것이 이를 위한 방법입니다.별도의 변수를 정의해야 합니다(예:self):

function doop() {
    var old = $(this).siblings('.old').html();
    var new = $(this).siblings('.new').val();

    var self = this;

    $.ajax({
        url: 'doop.php',
        type: 'POST',
        data: 'before=' + old + '&after=' + new,
        success: function(resp) {
            if(resp == 1) {
                $(self).siblings('.old').html(new);
            }
        }
    });

    return false;
}

success함수는 다음의 값을 유지합니다.self호출될 때, 그리고 당신이 기대하는 대로 행동해야 합니다.

언급URL : https://stackoverflow.com/questions/1570146/ajax-jquery-success-scope

반응형