2012-09-06 56 views
0

我對創建的對象創建的方法iive有問題。其中一種方法需要回調到另一種方法。問題是我不能將數據添加到調用該方法的對象。它保持未定義的狀態。否則當我發送數據到控制檯是正確的。我怎樣才能獲得數據回到方法?獲取回調函數以添加到對象javascript

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

}); 

} 
+0

'complete:function(){blah; }」 – cohs

回答

1

歡迎異步編程的世界。

您需要考慮到$.ajax()不會立即返回值的事實,並且在引導到下一行代碼之前,JavaScript引擎不會等待它完成。

爲了解決這個問題,您需要重構代碼併爲您的AJAX調用提供一個回調函數,它會調用您想要在接收到$.ajax()響應時執行的代碼。此回調應作爲$.ajax()complete參數傳入。

0

設置JSONP回調的正確選項是jsonpCallbackAPI for .ajax(...)的建議是將其設置爲一項功能。

{ 
    // ... 
    jsonpCallback: function (returnedData) { 
    blogObject.showAvatar(returnedData); 
    }, 
    // ... 
} 
相關問題