如何在$ .ajax的成功回调中传递$(this)

时间:2016-05-24 10:13:00

标签: jquery ajax callback parameter-passing this

我看到一些不同的访问$(这个)的例子是ajax的成功回调但没有给我我想要的答案 - 他们都在ajax函数中访问$(this),我想传递$(这个)到一个单独的职能。

因此,如果有2个文本框需要验证

$("#tb1").focusout(function(){
    $.ajax({
        type:'POST',
        url: 'validURL',
        data: {various_parameters},
        contentType: 'application/json; charset=utf-8',
        dataType:'json',
        success: function(data){
            validInput(data, $(this));
        },
        error: error
    });
}

$("#tb2").focusout(function(){
    $.ajax({
        type:'POST',
        url: 'validURL',
        data: {various_parameters},
        contentType: 'application/json; charset=utf-8',
        dataType:'json',
        success: function(data){
            validInput(data, $(this));
        },
        error: error
    });
}

function validInput(response, obj){
    console.log(response.d);
    console.log(obj.val());
};

当我运行代码时,我得到了响应的正确值。但是出现了错误:jquery-1.11.1.min.js:4未捕获的TypeError:无法读取obj.val()的undefined属性'toLowerCase'。

我做错了吗?

感谢您的帮助。 见:DOS /运行

4 个答案:

答案 0 :(得分:15)

$(this)与最内层函数相关,在这种情况下,您需要在ajax查询之前将$(this)分配给变量,并在成功中使用该变量

$("#tb1").focusout(function(){
    var elem = $(this);
    $.ajax({
        type:'POST',
        url: 'validURL',
        data: {various_parameters},
        contentType: 'application/json; charset=utf-8',
        dataType:'json',
        success: function(data){
            validInput(data, elem);
        },
        error: error
    });
}

答案 1 :(得分:7)

那是因为聚焦元素的上下文在ajax调用中丢失了。

您可以在ajax中设置2012-01-01选项以引用DOM对象,以便将ajax中的上下文设置为元素上下文:

context

答案 2 :(得分:3)

您可以通过首先引用它来实现此目的。

$("#tb2").focusout(function(){
    var $this = $(this);
    $.ajax({
        type:'POST',
        url: 'validURL',
        data: {various_parameters},
        contentType: 'application/json; charset=utf-8',
        dataType:'json',
        success: function(data){
            validInput(data, $this);
        },
        error: error
    });
}

答案 3 :(得分:0)

' this'成功函数中的关键字是一个不同的'这个'在您的Ajax通话之前存在,它是一个不同的范围'。

为初始'这个'创建一个新变量。所以你可以在成功回调中使用它,如下所示:

$("#tb1").focusout(function(){
    var $this = $(this);
    $.ajax({
        type:'POST',
        url: 'validURL',
        data: {various_parameters},
        contentType: 'application/json; charset=utf-8',
        dataType:'json',
        success: function(data){
            // Here we use the $this variable, initialised before the $.ajax call.
            validInput(data, $this);
        },
        error: error
    });
}