我正在编写程序以在php中生成随机数,将其返回到网页并将其绘制在图表上。我已经调试了一下,并注意到当我调用请求函数时,网页会通过其余的调用函数,然后再使用从PHP返回数据。我需要从请求中获取数据并将其返回给调用者,然后继续使用从请求中收到的数据。
这是调用者函数在控制台中跟踪的部分:
function plotData(dataSet) {
var x = xScale+20; // 20 = margin length
var y = 260; //origin of graph
getRequest();
console.log("x = "+x);
context.beginPath();
x=x+xScale; //Move along the xAxis
console.log("dataSet = "+dataSet[0]+", "+dataSet[1]);
...
}
这是我的PHP请求:
function getRequest()
{
var request;
if (window.XMLHttpRequest)
{ // Mozilla, Safari, IE7+ ...
request = new XMLHttpRequest();
}
else if (window.ActiveXObject)
{ // IE 6 and older
request = new ActiveXObject("Microsoft.XMLHTTP");
}
request.onreadystatechange = function()
{
console.log('onReady');
if (request.readyState === XMLHttpRequest.DONE)
{
if (request.status === 200)
{
random = request.responseText;
random = parseInt(random);
random = random/100;
random = random.toFixed(2);
console.log("random = " +random);
data[1] = random;
console.log("data = "+data[0]+", "+data[1]);
}
else
{
alert ('There was a problem with the request');
}
}
}
request.open("GET", "external.php", true);
request.send();
}
最后是控制台日志:
onReady
x = 31.21951219512195
dataSet = 10, 10
onReady (x3)
random = 10.25
data = 10, 10.25
如您所见,该程序在从plotData()
调用函数之前调用getRequest()
中的所有console.log函数。
这是有问题的,因为在我继续getRequest()
之前,我需要从plotData()
获取信息。
我刚才想到的一个可能的解决方案是创建一个在plotData()
之后执行的第三个函数,它执行我需要它做的事情,但我觉得我应该能够用我拥有的函数来处理它。
有人可以在请求函数之前解释为什么它会通过调用函数吗?我如何修复它以等待请求函数完成,然后再向前调用?