我的AJAX功能并不像我期望的那样工作。
似乎AJAX成功回调中的“this”并未引用与showSnapshotComment函数范围内相同的“this”。
我尝试使用上下文仍然无法正常工作。我的用法可能不正确。我可能正在思考它。
function showSnapshotComments(snapshot) {
var self = $j(this);
alert($j(this).attr('class'));
$j.ajax({
cache: false,
context: this,
url: 'show_snapshot_comments/' + snapshot.id,
async: true,
dataType: 'script',
success: function() {
$j('#snapshots a.photo').each(function(i) {
$j(this).qtip({
content: $j(this).nextAll('.info').eq(i),
position: {
target: 'mouse',
adjust: { mouse: true },
viewport: $j(window)
},
hide: {
event: 'click mouseleave',
delay: 300
},
show: {
solo: true,
event: 'click mouseenter'
},
style: {
tip: true,
classes: "ui-tooltip-light"
}
});
});
}
});
}
答案 0 :(得分:1)
将对self的引用更改为DOM元素而不是jquery对象(self = this),并在成功回调函数中将this
引用更改为self
。
要理解为什么需要这样做,你应该阅读闭包和闭包范围:
http://robertnyman.com/2008/10/09/explaining-javascript-scope-and-closures/
答案 1 :(得分:1)
this
确实引用与this
相同的showSnaphotComments
你得到的答案是正确的,但最简单的答案是解释真正的问题是{{成功回调中的函数 - 它将在迭代DOM元素时更改上下文...但是AJAX成功中的$j().each
是正确的尝试以下内容:
this
答案 2 :(得分:0)
问题在于此变量的范围。 请尝试以下代码:
var self = $j(this);
var that = this;
alert($j(this).attr('class'));
$j.ajax({
cache: false,
context: that,
.
.
.
.