阿贾克斯jQuery的成功,范围(Ajax jquery success scope)

2019-08-18 05:45发布

我有这样的Ajax调用一个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); 线没有做它应该做的事。

感谢..所有有用的意见/答案投票了。

更新:它出现问题的一半是范围(感谢帮助我澄清的答案),而另一半是,我试图以同步方式使用AJAX。 我创建了一个新的职位

Answer 1:

首先new是一个保留字 。 您需要重命名变量。

要回答你的问题,是的,你需要保存this在成功回调外的变量,并引用它的成功处理程序代码中:

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

这就是所谓的闭包 。



Answer 2:

您应该使用情境设置为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;
}

“这个”将转移到成功的范围和预期将采取行动。



Answer 3:

this势必得施加的执行功能的对象。 这可能是一些Ajax响应对象,或者全局对象( window ),或别的东西(取决于执行$.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调用时,并应表现为你的预期。



文章来源: Ajax jquery success scope