0

作成されたオブジェクトに対して作成されたメソッドiveに問題があります。メソッドの1つには、別のメソッドへのコールバックが必要です。問題は、メソッドを呼び出したオブジェクトにデータを追加できないことです。未定義として戻ってきます。そうでなければ、私がデータをコンソールに送るとき、それは正しいです。データをメソッドに戻すにはどうすればよいですか?

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

});

}
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 に答える