为什么我看不到对象的属性

时间:2012-07-29 06:15:36

标签: javascript jquery

我很难过,很想知道我在做什么。

我只是重写了一些代码并清理了一些东西。我有一个方法,它执行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?
});

1 个答案:

答案 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" };
};

现在你的调用函数将有一些东西需要打印。