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

问题描述:

我在这里住了,很想知道我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? 
}); 
+2

你有没有听说过的AJAX的异步特性?的 – Musa 2012-07-29 06:22:14

+0

可能重复[无法返回xmlhttp.responseText?](http://stackoverflow.com/questions/10369839/cant-return-xmlhttp-responsetext) – DCoder 2012-07-29 06:51:12

记住,这是异步 - 功能,当你看着它没有被调用。 当功能返回速率呼叫尚未完成。如果稍后查看速率变量,它将获得数据。我没有看到代码的第二部分,但我期望是一个类似的问题。


要了解这个问题,并提出了以下变化:

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

现在您的通话功能将有一些打印。

+0

我不认为这是正确的。我可以输出对象后的ajax调用没有问题,我只是无法访问属性。 – SaminOz 2012-07-29 06:30:22

+0

是的,后ajax调用,但行'返回率;'会发生在ajax调用之前,这是我的观点。 – Hogan 2012-07-29 06:36:37

+0

@SaminOz对象是活的,所以当代码执行的对象是空的,但是当你在Ajax请求完成控制台检查和性能充满,所以它看起来像它的工作时,它确实不是 – Musa 2012-07-29 06:37:01