jQuery AJAX成功上下文

时间:2011-04-08 19:50:11

标签: jquery ajax

我的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"
        }
    });
});

    }
  }); 
}

3 个答案:

答案 0 :(得分:1)

将对self的引用更改为DOM元素而不是jquery对象(self = this),并在成功回调函数中将this引用更改为self

要理解为什么需要这样做,你应该阅读闭包和闭包范围:

http://robertnyman.com/2008/10/09/explaining-javascript-scope-and-closures/

答案 1 :(得分:1)

AJAX成功回调中的

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, 
  .
  .
  .
  .