Javascript 我可以将$(this)传递给.getJSON回调函数吗?有解决办法吗?

Javascript 我可以将$(this)传递给.getJSON回调函数吗?有解决办法吗?,javascript,jquery,Javascript,Jquery,我试图在每个li上获取rel的值,并将其传递给.getJSON函数。然后,我想将回调中的缩略图url值添加到li子体的图像标记中。我的问题是如何将$(this)对象传递给回调函数。看起来$(this)是空的 HTML: 只需在回调外部分配它(就像我正在设置self),然后在回调内部使用(通过引用您设置的变量): 这是因为此在的回调中不同。each()与$.getJSON()的回调中不同。如果使用$.ajax而不是$.getJSON,则可以使用上下文选项: $('ul.sample l

我试图在每个li上获取rel的值,并将其传递给.getJSON函数。然后,我想将回调中的缩略图url值添加到li子体的图像标记中。我的问题是如何将$(this)对象传递给回调函数。看起来$(this)是空的

HTML:


只需在回调外部分配它(就像我正在设置
self
),然后在回调内部使用(通过引用您设置的变量):


这是因为
的回调中不同。each()
$.getJSON()
的回调中不同。如果使用
$.ajax
而不是
$.getJSON
,则可以使用
上下文
选项:

$('ul.sample li').each(function () {
    var url = 'http://sampleurl/api/url?' + $(this).attr('rel');
    $.ajax({
        url : url,
        dataType : 'json',
        context : this,
        complete : function (data) {
            // 'this' will be what you passed as context 
            $(this).find('img').attr('src') = data.thumbnail_url;
        }
    });
});

语法错误:意外的标识符(意外的令牌标识符)Javascript闭包再次罢工!除了最初的问题之外,您还有另一个问题:它应该是
var url='1!'http://sampleurl/api/url?'+$(this.attr('rel')只想指出您复制了OPs代码中的错误。它应该是
var-url=http://sampleurl/api/url?'+$(this.attr('rel')@Steve:你说得对,我确实复制了OP的代码,修复了对他不起作用的代码。按照惯例,你应该使用变量名“that”而不是“self”@GlennFerrieLive这是什么惯例?虽然我也使用了
,但我已经看到这两个变量在野外大量使用。jQuery本身到处使用
self
。@GlennFerrieLive,恕我直言,Crockford并不总是正确的。在实践中,您将看到
self
一样被使用来保持
这个
。我更喜欢
self
,因为它比
that
的语法意义更接近
这个
,因此更容易混淆,可读性更强。这些$.ajax()函数和#.getJSON()函数之间还有什么主要区别吗?嗯,
$.ajax
更详细,正如您所见。在本例中,我传递了使其行为完全类似于
getJSON
所需的选项,但是
$.get
$.post
$.getJSON
基本上是
$.ajax
的包装。
<ul class="sample">
   <li rel="value1">
       <img src="">
   </li>
   <li rel="value2">
       <img src="">
   </li>
</ul>
$('ul.sample li').each(function () {

    var self = $(this); // using self to store $(this)
    var url = 'http://sampleurl/api/url?' + self.attr('rel');

    $.getJSON(url, function (data) {
        // now retrieving self - it is accessible from the callback
        self.find('img').attr('src') = data.thumbnail_url;
    });

});
$('ul.sample li').each(function () {
    var url = 'http://sampleurl/api/url?' + $(this).attr('rel');
    $.ajax({
        url : url,
        dataType : 'json',
        context : this,
        complete : function (data) {
            // 'this' will be what you passed as context 
            $(this).find('img').attr('src') = data.thumbnail_url;
        }
    });
});