2012-08-12 95 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

相關問題