开发者问题收集

此对象引用在 $.each 内不起作用

2011-10-19
210

为什么 foo 不会被附加?

$.ajax({
                type: 'GET',
                dataType: 'json',
                cache: false,
                url: 'barfoochakalaka',
                success:
                    function(response) {
                        $.each(response, function(index, val) {                             
                            $(this).parent().parent().append('foo');
                        });

                    }
})
3个回答

因为在 each 中, this 被设置为当前正在迭代的元素( docs ),所以通常我们在进入 each 循环之前将 this 定义为其他内容:

var that = this;
$.each(response, function(index, val) {
    var content = '<div class="link-history">'+ val.date + ', ' + val.userid + ', ' + val.status + '</div>';
    $(that).parent().parent().append('foo');
});

然而,在 这种 情况下,AJAX 请求的 success 回调中的 this 等于启动请求的 jqXHR 对象,而不是您要查找的 DOM 元素,因此我们必须将 var that = this 移到更远的地方;

var that = this;
$.ajax({
    type: 'GET',
    dataType: 'json',
    cache: false,
    url: 'barfoochakalaka',
    success: function(response) {
        $.each(response, function(index, val) {
            var content = '<div class="link-history">' + val.date + ', ' + val.userid + ', ' + val.status + '</div>';
            $(that).parent().parent().append('foo');
        });

    }
})
Matt
2011-10-19
var $this = $('#Selector').parent().parent();
$.ajax({
                type: 'GET',
                dataType: 'json',
                cache: false,
                url: 'barfoochakalaka',
                success:
                    function(response) {
                        $.each(response, function(index, val) {
                            var content = '<div class="link-history">'+ val.date + ', ' + val.userid + ', ' + val.status + '</div>';
                            $this.append('foo');
                        });

                    }
})


编辑:

.parent().parent() 添加到原始选择器,因此您无需在每个循环中调用它

Joe
2011-10-19

响应可能不是数组,而只是字符串。尝试将响应分配给一个元素,然后在执行 .each() 之前使用选择器抓取该元素中的所有子元素

Moin Zaman
2011-10-19