jQuery ajax成功与$(this)不兼容?

时间:2011-07-31 13:57:04

标签: javascript jquery ajax

我一直在使用jQuery中的ajax工具,并且在执行我的ajax成功时遇到了使用$(this)的问题。我想知道是否有可能在您的成功中使用$(this),因为我看到教程使用它但当我尝试使用它时它不起作用...但是如果我使用$(文档)或其他一些方法来我希望它的对象工作正常...任何帮助将不胜感激,因为我是jQuery的新手!提前致谢!我玩的代码如下:

$(".markRead").click(function() {
    var cId = $(this).parents("div").parents("div").find("#cId").val();
    var field = "IsRead";

    $.ajax({
        type: "POST",
        url: "ajax/contract_buttons.php",
        dataType: "text",
        data: "contractId=" + cId + "&updateField=" + field,
        async: false,
        success: function(response) {
            //$(this) doesnt recognize the calling object when in the success function...
            $(this).find("img").attr("src", "images/read.png");
        },
        error: function(xhr, ajaxOptions, thrownError) {
            alert(xhr.statusText);
            alert(thrownError);
        }
    });
});

1 个答案:

答案 0 :(得分:3)

this总是引用当前的执行上下文,因此它不一定在回调函数中保持不变,就像ajax成功处理程序一样。如果你想引用它,你必须像Dennis指出的那样,将它的值保存到你自己的局部变量中,这样你就可以在以后引用它,即使实际的this值可能已设置为其他值。这绝对是javascript的细微差别之一。将您的代码更改为:

$(".markRead").click(function() {
    var cId = $(this).parents("div").parents("div").find("#cId").val();
    var field = "IsRead";
    var element = this;   // save for later use in callback

    $.ajax({
        type: "POST",
        url: "ajax/contract_buttons.php",
        dataType: "text",
        data: "contractId=" + cId + "&updateField=" + field,
        async: false,
        success: function(response) {
            //$(this) doesnt recognize the calling object when in the success function...
            $(element).find("img").attr("src", "images/read.png");
        },
        error: function(xhr, ajaxOptions, thrownError) {
            alert(xhr.statusText);
            alert(thrownError);
        }
    });
});