1
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”将其公开的内容,但我没有得到任何地方。有人可以解释为什么这不起作用吗?

类型错误:对象 [对象对象] 没有方法“成本”

4

2 回答 2

1

这与对象构造函数无关。

最重要的是,您对异步调用的工作方式感到困惑(AJAX 中的第一个 A!)。使用请求的结果调用in 中的匿名函数makeHttpRequest- 这可能是在其余代码执行之后的任何时间,或者根本不执行。

您需要使您的代码事件驱动 - 即您发出 AJAX 请求并在返回响应时运行代码。

例如:

var onSuccess = function(data) {
    var data = data['body'],
    xml = convert(data);
    // ... etc
}

makeHttpRequest(url, onSuccess);
于 2012-08-12T22:32:22.490 回答
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());
});

您必须了解异步代码的工作原理。它不仅仅是一组依次执行的指令。从事件和回调的角度来考虑它。谷歌应该提供帮助。

于 2012-08-12T23:31:19.207 回答