jQuery Ajax回调无法识别$(this)对象

时间:2015-06-07 06:26:21

标签: javascript jquery ajax callback this

这是我的代码

$(".library-fields-container div.field-content img").click(function(){
    var nid = getImageNodeID($(this).siblings(".image-span").text());
    $.ajax({
        url: Drupal.settings.basePath + 'views/ajax',
        type: 'POST',
        dataType: 'json',
        data: 'view_name=fehrest&view_display_id=block_1&view_args='+nid,
        success: function(response) {
            var output = response[1].data;
            alert(output);  
            $(this).hide();
        },
        error: function(data) {
            alert('An error occured!');
        }
      });
});  

我确定output变量打印的内容并不是空的,因为alert函数会显示它的内容。

问题是当我放

时它不会隐藏$(this)
$(this).hide();

在Ajax调用之前的click事件开始时,它隐藏了图像。

使用$(this)对象的Ajax回调函数是什么?

2 个答案:

答案 0 :(得分:1)

在此上下文中 - this不是元素。 在ajax调用this之前保存到self变量。像

var self = this;
$.ajax({
    ...
    success: function(response) {
        var output = response[1].data;
        alert(output);  
        $(self).hide();
    }
});

答案 1 :(得分:0)

$(".library-fields-container div.field-content img").click(function(){
var target = $(this);
var nid = getImageNodeID($(this).siblings(".image-span").text());
$.ajax({
    url: Drupal.settings.basePath + 'views/ajax',
    type: 'POST',
    dataType: 'json',
    data: 'view_name=fehrest&view_display_id=block_1&view_args='+nid,
    success: function(response) {
        var output = response[1].data;
        alert(output);  
        target.hide();
    },
    error: function(data) {
        alert('An error occured!');
    }
  });
});