2012-07-29 101 views
0

我在這裏住了,很想知道我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

回答

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

現在您的通話功能將有一些打印。

+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

相關問題