function makeHttpRequest(url, success) {
$.ajax({
url: url,
dataType: "jsonp",
crossDomain: true,
mimeType: 'application/javascript',
async: false,
success: success
});
}
var actions = {
get_min_hit_list_bounty: function (user_id) {
makeHttpRequest("get_min_hit_list_bounty?target_id=" + user_id + "&", function (data) {
var data = data['body'],
xml = convert(data);
this.min_cost = $(xml).find('min_cost').text();
this.cost = function () {
return this.min_cost;
}
});
}
};
var myBounty = new actions.get_min_hit_list_bounty(user);
alert(myBounty.cost());
我无法从这种类型的对象中返回任何内容。我已经阅读了很多关于使用原型和使用“this”来公开它,但我没有得到任何地方。有人可以解释为什么这不起作用?
TypeError:Object [object Object]没有方法'cost'
答案 0 :(得分:1)
这与对象构造函数无关。
最重要的是,你会混淆异步调用的工作原理(AJAX中的第一个A!)。使用请求的结果调用makeHttpRequest
中的匿名函数 - 可以是代码执行的其余部分之后的任何时间,或者根本不执行。
您需要启动代码事件驱动 - 即,在返回响应时发出AJAX请求并运行代码。
例如:
var onSuccess = function(data) {
var data = data['body'],
xml = convert(data);
// ... etc
}
makeHttpRequest(url, onSuccess);
答案 1 :(得分:0)
我相信它应该是这样的:
var actions = {
get_min_hit_list_bounty: function (user_id) {
this.userId = user_id;
this.min_cost = 999999;
this.cost = function () {
return this.min_cost;
};
this.getMinCost = function(callback) {
var me = this;
var queryString = [
"get_min_hit_list_bounty?target_id=",
this.userId,
"&"].join("");
makeHttpRequest(queryString, function (data) {
var data = data['body'],
xml = convert(data);
me.min_cost = $(xml).find('min_cost').text();
callback.apply(me);
});
}
}
};
var myBounty = new actions.get_min_hit_list_bounty(user);
myBounty.getMinCost(function() {
alert(this.cost());
});
您必须了解异步代码的工作原理。它不仅仅是一组连续执行的指令。从事件和回调的角度来考虑它。 谷歌应该提供帮助。