0

我被难住了,很想知道我在想什么。

我只是在重新编写一些代码并清理一些东西。我有一个执行 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?
});
4

1 回答 1

1

请记住,这是异步的——当您查看该函数时,该函数尚未被调用。当函数返回 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 { "price" : "I am not undefined" };
};

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

于 2012-07-29T06:22:50.937 回答