我目前正在开发我的第一个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文件中设置。我尝试使用回调函数来移动变量,但是由于回调函数也是异步的,我似乎无法使其工作。我在这里错过了什么吗?非常感谢任何帮助,谢谢。
答案 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>