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