2012-08-12 63 views
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”来公开它,但我没有得到任何地方。有人能解释为什么这不起作用吗?对象构造函数和Javascript中的返回值

TypeError: Object [object Object] has no method 'cost'

+2

您可以在'makeHttpRequest()'回调函数中定义函数,而不是在'actions.get_min_hit_list_bounty'对象中定义函数 – zerkms 2012-08-12 22:04:44

+0

我在})之后试过this.cost。但它的未定义。 – 2012-08-12 22:10:57

+0

用该版本的代码更新您的问题 – zerkms 2012-08-12 22:19:34

回答

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

你必须理解代码是如何工作的同步。这不仅仅是一组执行后果的指令。从事件和回调的角度考虑它。 谷歌应该帮忙。

+0

将警报更改为警报(myBounty.min_cost);现在它可以工作。谢谢:) – 2012-08-12 23:50:50

+0

@StormyWeather this.cost()或myBounty.cost()不能正常工作? – 2012-08-13 00:09:34

+0

没有一个那些。 Uncaught TypeError:Object [object Object] has no method'cost' – 2012-08-13 00:12:51

1

这与对象构造函数无关。

最重要的是你混淆了异步调用的工作方式(AJAX中的第一个A!)。 makeHttpRequest中的匿名函数是通过请求的结果调用的 - 可以在执行其余代码之后的任何时间,或根本不执行。

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

例如:

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

makeHttpRequest(url, onSuccess); 
+0

试过这种方式,但仍然没有运气。 – 2012-08-12 23:06:53

+0

好的。那么,我不知道你尝试了什么,所以.......... – Hamish 2012-08-12 23:10:09

+0

get_min_hit_list_bounty:function(user_id){makeHttpRequest(“get_min_hit_list_bounty?target_id =”+ user_id +“&”,get_min_hit_list_bounty); VAR get_min_hit_list_bounty =功能(数据){\t \t \t \t \t VAR数据=数据[ '身体'], – 2012-08-12 23:19:48

相关问题