获取一个回调函数来添加到对象javascript

时间:2012-09-06 01:54:27

标签: javascript ajax object methods callback

我遇到了为我创建的对象创建的方法的问题。其中一种方法需要回调另一种方法。问题是我无法将数据添加到调用该方法的对象。它不断变回未定义。否则,当我将数据发送到控制台时,它是正确的。如何将数据恢复到方法?

var blogObject = new Object();
var following = [...];

//get posts from those blogs

blogObject.getPosts = function () {
    var followersBlogArray = new Array();

    for (var i = 0; i < this.following.length;i++){
        var followersBlog = new Object();

   // get construct blog url

        var complete_blog_url = ...;

我在这里调用getAvatar函数,用它将当前用户发送到以下数组。

   followersBlog.avatar = blogObject.getAvatar(this.following[i]);

该部分顺利进行

   followersBlogArray.push(followersBlog);
   }
   this.followersBlogArray = followersBlogArray;
 }

这是使用以下数组中的当前用户调用的函数 这个函数调用ajax函数

blogObject.getAvatar = function (data) {
console.log("get avatar");
     var url = "..."

这个ajax函数可以正常工作并具有showAvatar的回调函数

          $(function() {
                         $.ajax({
                                type: "GET",
                                dataType: "jsonp",
                                cache: false,
                                url: url,
                                data: {
                                    jsonp:"blogObject.showAvatar"
                                }
                          });

});

}

调用getAvatar时调用此函数没问题。但是我无法将数据添加到followersBlog对象。

blogObject.showAvatar = function (avatar) {

    return avatar

}

这里的一切工作正常但我无法将showAvatar函数添加到我的followersBlog对象中。我试过了

blogObject.showAvatar = function (avatar) {
this.followersBlog.avatar = avatar; 
    return avatar

}

当然没有用。它显示为未定义。有人可以帮忙吗?

所以有些像......

$(function() {
                         $.ajax({
                                type: "GET",
                                dataType: "jsonp",
                                cache: false,
                                url: url,
                                complete: function () {
 this.avatar = data;
 }

                                                            data: {
                                    jsonp:"blogObject.showAvatar"
                                }
                          });

});

}

2 个答案:

答案 0 :(得分:1)

欢迎来到异步编程的世界。

您需要考虑$.ajax()不会立即返回值的事实,并且Javascript引擎不会等到它完成,然后再转到下一行代码。

要解决此问题,您需要重构代码并为AJAX调用提供回调,该调用将在收到$.ajax()的响应时调用您要执行的代码。此回调应作为complete的{​​{1}}参数传递。

答案 1 :(得分:0)

设置JSONP回调的正确选项是jsonpCallbackAPI for .ajax(...)的建议是将其设置为函数。

{
  // ...
  jsonpCallback: function (returnedData) {
    blogObject.showAvatar(returnedData);
  },
  // ...
}