如何将jquery的这个对象传递给内部成功函数?

时间:2016-01-28 08:33:02

标签: javascript jquery

下面是我的代码。我想根据ajax回调更改每个mainimage src。

jQuery('.xxx img[src*="mainimage"]').each(function() {
  vobj = $(this);
  var inmainurl = 'https://xxx.kki/api/oembed.json?url=' + $(this).attr('src');
  $.ajax({
    url: inmainurl,
    dataType: 'json',
    success: function(result) {
      $(this).attr('src', result.thumbnail_url); //this is not working.
    }
  });
});

以下无效

success: function (result) {                           
    $(this).attr('src',result.thumbnail_url);//this is not working.
}

如何实现这一目标?

3 个答案:

答案 0 :(得分:1)

如果您将内部$(this).attr更改为vobj.attr会解决您的问题吗?

看到vobj是你定义的变量。

答案 1 :(得分:0)

而不是

$(this).attr('src', result.thumbnail_url);

vobj.attr('src', result.thumbnail_url);

this是函数上下文,它对于两个函数都是不同的,但是ajax回调可以访问vobj变量。

答案 2 :(得分:0)

您需要在循环中使用闭包,否则vobj变量将在$.ajax调用后更改为下一个元素。您还需要在vobj处理程序中使用success变量。试试这个:

jQuery('.xxx img[src*="mainimage"]').each(function() {
    (function($el) {
        $.ajax({
            url: 'https://xxx.kki/api/oembed.json?url=' + $el.attr('src');,
            dataType: 'json',
            success: function(result) {
                $el.attr('src', result.thumbnail_url);
             }
        });
    })($(this));
});