jQuery,无法存储$ .get函数返回的数据

时间:2010-03-29 08:34:30

标签: javascript jquery

我正在尝试将 div#sidebar 转换为我的应用中的侧边栏。我的代码如下所示。

$('#sidebar').userProfile();

jQuery.fn.userProfile = function() {
  $.get('/users/profile', function(data){ $(this).html(data); });
};

它没有用,因为我发现 这个(在$ .get函数内)这里是对get请求的上下文而不是$('#sidebar')。然后我尝试了类似下面的内容。

$('#sidebar').userProfile();

#This doesnot work
jQuery.fn.userProfile = function() {
  var side_bar = null;
  $.get('/users/profile', function(data){ side_bar = data; });
  $(this).html(side_bar);
  console.log(side_bar);
};

这也不起作用。在firebug控制台中,当我声明变量时,我看到Null正在设置在顶部.Atlast我通过硬编码选择器将我的代码更改为类似的东西。

#This works, but I cannot turn any element to a sidebar which is sick.
jQuery.fn.userProfile = function() {
  $.get('/users/profile', function(data){ $('#sidebar').html(data); });
}; 

但这不是我想要的,因为我想将任何元素转换为侧边栏。我哪里错了,哪个是正确的做法?

1 个答案:

答案 0 :(得分:3)

$('#sidebar').userProfile();

jQuery.fn.userProfile = function() {
  var elem = this;
  $.get('/users/profile', function(data){
    $(elem).html(data);
  });
};

由于this随每个上下文发生变化,因此您可以尽早将this存储在另一个变量中,以便捕获正确的上下文。

您的第二个示例不起作用,因为.get回调是在未定义的时间(数据返回时)异步执行的。