0

我为我创建的对象创建的方法有问题。其中一个方法需要回调另一个方法。问题是我无法将数据添加到调用该方法的对象中。它一直以未定义的形式返回。否则,当我将数据发送到控制台时,它是正确的。我怎样才能将数据返回到方法中?

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 时调用此函数没有问题。但是,我无法将数据添加到 followerBlog 对象。

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

});

}
4

2 回答 2

1

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

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

要解决此问题,您需要重构代码并为您的 AJAX 调用提供回调,该回调将在收到来自$.ajax(). 此回调应作为 的complete参数传入$.ajax()

于 2012-09-06T02:14:20.740 回答
0

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

{
  // ...
  jsonpCallback: function (returnedData) {
    blogObject.showAvatar(returnedData);
  },
  // ...
}
于 2012-09-06T03:07:40.693 回答