为什么我看不到我的对象的属性
问题描述:
我在这里住了,很想知道我mising。为什么我看不到我的对象的属性
我只是重新写一些代码和清理一些东西了。我有一个方法,执行ajax调用并返回一个json字符串。因为我在这里使用了这个方法,所以我抽象出了这个方法在这个名字空间中。
这是JSON对象返回
{"charge_ID":"4","price":"37","description":"corporate rate"}
这是抽象方法。
wwdb.getChargeRate = function(chargeID){
var rate = {}, prop;
$.post(baseUrl + 'dashboard_job/jx_get_charge_rate',
{
'charge_ID': chargeID
},
function(data){
for(prop in data) {
rate[prop] = data[prop];
}
},
'json'
);
return rate;
};
我以为我只是能够分配数据的速度,但不得不迭代通过,以得到它的工作。事实上,我认为我可以从$ .post()方法的function()部分直接返回数据,但那不起作用。所以问题1是为什么我不能只返回数据?
但更基本的和令人沮丧的是,在下面的代码我无法访问对象属性的事实。问题2是为什么?
$('#charge_rate_slt').change(function(){
var t = $(this), v = $(t).val(), rate;
console.log(wwdb.getChargeRate(v)); //returns object ok
rate = wwdb.getChargeRate(v); //assigns object ok
console.log(rate); //displays in firebug as object with properties
console.log(rate.price) //undefined
for(p in rate)
console.log(p); //undefined?
});
答
记住,这是异步 - 功能,当你看着它没有被调用。 当功能返回速率呼叫尚未完成。如果稍后查看速率变量,它将获得数据。我没有看到代码的第二部分,但我期望是一个类似的问题。
要了解这个问题,并提出了以下变化:
wwdb.getChargeRate = function(chargeID){
var rate = {}, prop;
$.post(baseUrl + 'dashboard_job/jx_get_charge_rate',
{
'charge_ID': chargeID
},
function(data){
for(prop in data) {
rate[prop] = data[prop];
}
},
'json'
);
return { "price" : "I am not undefined" };
};
现在您的通话功能将有一些打印。
你有没有听说过的AJAX的异步特性?的 – Musa 2012-07-29 06:22:14
可能重复[无法返回xmlhttp.responseText?](http://stackoverflow.com/questions/10369839/cant-return-xmlhttp-responsetext) – DCoder 2012-07-29 06:51:12