2016-05-07 85 views
0

我是一個完整的JS noob,請耐心等待。函數之間傳遞javascript變量

我得到了一個簡單的JS查詢雅虎股票價格,這是工作很好,但由於某種原因,我不能將結果變量傳遞給另一個函數,我想在其中執行一些其他計算。我在這裏粘貼了簡化版本。

如果有人能幫助我會感激,所以我無法弄清楚,整個上午。 :(

謝謝!

var result = "0"; 
 

 
function onBodyLoad(){ 
 

 
getQuote(); 
 
    
 
var balance = "100"; 
 
var leverage = balance/result; 
 
    
 
$("#leverage_result").text(leverage); 
 
    
 
} 
 

 
function getQuote(){ 
 

 
    var url = "http://query.yahooapis.com/v1/public/yql"; 
 
    var symbol = $("#symbol").val(); 
 
    symbol = "^GSPC"; 
 

 
    var data = encodeURIComponent("select * from yahoo.finance.quotes where symbol in ('" + symbol + "')"); 
 
    
 
    $.getJSON(url, 'q=' + data + "&format=json&diagnostics=true&env=http://datatables.org/alltables.env") 
 
     .done(function (data) { 
 
     result = parseInt(data.query.results.quote.LastTradePriceOnly); 
 
    }); 
 
    
 
}
<body onload="onBodyLoad()"> 
 
<div id='leverage_result'>No Price</div> 
 
</body>

+0

好吧,它應該,但是有一個亂七八糟的周圍如何我在第二個函數中存儲結果變量,外面getJSON調用它無法顯示。 – alfa8884

回答

0

你撞你的頭靠在牆上這裏,因爲你處理異步代碼,就好像它是同步的。當你做$.getJSON代碼因此,在您的onBodyLoad函數中,執行getQuote之後的行將立即執行,而不是在您發出請求的結果到達后里面的getQuote功能。

你想要做的就是運行你的代碼你得到的結果從服務器返回後,因此你可以使用一個回調什麼:

function onBodyLoad(){ 

    getQuote(function(result) { 
     var balance = "100"; 
     var leverage = balance/result; 

     $("#leverage_result").text(leverage);    
    }); 

} 

function getQuote(callback){ 

    var url = "http://query.yahooapis.com/v1/public/yql"; 
    var symbol = $("#symbol").val(); 
    symbol = "^GSPC"; 

    var data = encodeURIComponent("select * from yahoo.finance.quotes where symbol in ('" + symbol + "')"); 

    $.getJSON(url, 'q=' + data + "&format=json&diagnostics=true&env=http://datatables.org/alltables.env") 
    .done(function (data) { 
     result = parseInt(data.query.results.quote.LastTradePriceOnly); 

     callback(result); 
    }); 

} 

發生了什麼事是我要創建一個匿名函數收到result作爲其唯一參數,並使用它在從遠程服務器收到數據後執行所需的操作。此功能被傳遞給您的getQuote函數,並且只有在$.getJSON完成後纔會調用。一個更優雅的解決方案是使用承諾,但這應該讓你去。

呵呵,避免全局變量。 99.9%的時間可以避免,因爲解決方案存在於不需要的地方。

+0

謝謝,你在說什麼是有道理的,我確信我的代碼不是最優的,JS遠不是我的強項。 :) 由於某種原因結果變量仍然沒有達到第二個功能:http://jsfiddle.net/RU8Jq/807/ 任何想法我搞砸了? :/ – alfa8884

+0

該id是'result',而不是'leverage_result'! – juandemarco

+1

我在哭,非常感謝你,我希望我可以對你喝一杯啤酒或其他東西,但我提高了你的評論!非常感謝你再次!!!! :) – alfa8884