将异步函数中获得的值传递给index.html?

时间:2014-06-03 15:02:00

标签: javascript jquery ajax asynchronous argument-passing

我目前正在开发我的第一个Web应用程序,用户可以使用AJAX实时选择库存并获取库存数据。

我目前已对其进行了设置,以便用户可以选择股票并从数据库中获取信息(请参阅3weekwebsites.com上的演示),但是现在我正在尝试使用相同的方法构建图表,这证明是显着的更加困难。这是因为在我可以使用javascript显示结果之前,然而现在我需要制作图表的代码在我的index.html中,据我所知,你不能传递来自异步函数的返回值。

HTML

getStock("aapl");

<script>
var chartData = [];
        function createStockChart() {
            ...
            chart.dataProvider = chartData;     
            chart.write('chartdiv');
        }

</script>  
<body>
    <div id="chartdiv" style="width:100%; height:500px;"></div>
</body>

的Javascript

var stock;

function getStock(str)
    {   
        if (window.XMLHttpRequest)
        {
            // Create the object for browsers
            xmlhttp=new XMLHttpRequest();
        }
        else
        {
            // Create the object for browser versions prior to IE 7
            xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
        }
        xmlhttp.onreadystatechange=function()
        {
            // if server is ready with the response
            if (xmlhttp.readyState==4) 
            {
                // if everything is Ok on browser
                if(xmlhttp.status==200) 
                {    
                    stock = xmlhttp.responseText.split(",");
                    alert("Can I pass this value along somehow:" + stock);
                }
            }
        }
        //send the selected option id to the php page 
        xmlhttp.open("GET","query.php?symbol="+str,true);
        xmlhttp.send();
    }

正如你所看到的,我想传递我的javascript文件中获得的值(变量&#34; stock&#34;),这样我就可以在index.html中设置我的图表数据,或者最终在另一个javascript文件中设置。我尝试使用回调函数来移动变量,但是由于回调函数也是异步的,我似乎无法使其工作。我在这里错过了什么吗?非常感谢任何帮助,谢谢。

1 个答案:

答案 0 :(得分:0)

如果我理解你的问题,你可以改变JS文件中的函数,将回调函数作为参数......

function getStock(str, callback){
     //make request and if status 200 makea call to callback function
     if(xmlhttp.status==200) 
            {    
                stock = xmlhttp.responseText.split(",");
                alert("Can I pass this value along somehow:" + stock);
                callback(stock);
            }
}

并在HTML文件中传递回调函数...

getStock("aapl", createStockChart);
<script>
   var chartData = [];
    function createStockChart(stockVal) {
        ...
        chart.dataProvider = chartData;     
        chart.write('chartdiv');
        //use stockVal
    }

</script>