我很难过,很想知道我在做什么。
我只是重写了一些代码并清理了一些东西。我有一个方法,它执行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?
});
答案 0 :(得分:1)
请记住,这是异步的 - 当您查看它时,尚未调用该函数。 当函数返回速率时,调用尚未完成。如果您稍后查看速率变量,它将获得数据。我没有看到代码的第二部分,但我预计是一个类似的问题。
要了解此问题,请进行以下更改:
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" };
};
现在你的调用函数将有一些东西需要打印。