我遇到了为我创建的对象创建的方法的问题。其中一种方法需要回调另一种方法。问题是我无法将数据添加到调用该方法的对象。它不断变回未定义。否则,当我将数据发送到控制台时,它是正确的。如何将数据恢复到方法?
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 :(得分:1)
欢迎来到异步编程的世界。
您需要考虑$.ajax()
不会立即返回值的事实,并且Javascript引擎不会等到它完成,然后再转到下一行代码。
要解决此问题,您需要重构代码并为AJAX调用提供回调,该调用将在收到$.ajax()
的响应时调用您要执行的代码。此回调应作为complete
的{{1}}参数传递。
答案 1 :(得分:0)
设置JSONP回调的正确选项是jsonpCallback
。 API for .ajax(...)
的建议是将其设置为函数。
{
// ...
jsonpCallback: function (returnedData) {
blogObject.showAvatar(returnedData);
},
// ...
}