Javascript Ajax异步调用-如何克服这个问题?
我是JS新手-我只想从这个开始 看看这个简单的例子,我想画X个仪表,其中X是通过Ajax调用从JSON中获取的Javascript Ajax异步调用-如何克服这个问题?,javascript,jquery,ajax,Javascript,Jquery,Ajax,我是JS新手-我只想从这个开始 看看这个简单的例子,我想画X个仪表,其中X是通过Ajax调用从JSON中获取的 <body> <div id="gServer"></div><BR> <script type="text/javascript" language="javascript"> /* * Obtain number of sessions and Server Status * Number of sessions i
<body>
<div id="gServer"></div><BR>
<script type="text/javascript" language="javascript">
/*
* Obtain number of sessions and Server Status
* Number of sessions is used to draw gauge per session
*/
$.ajax({
url: url,
dataType: 'json',
data: jd,
success: function(data)
{
//
Server_CpuCount = data.Server_Cpu_Count;
Server_LoadAverage = data.Server_Load_Average;
Server_Sessions = data.Server_Sessions_Count;
// Create Gauge for every session connected
for (i = 0; i < Server_Sessions; i++)
{
arr.push(new JustGage({
id: "g"+i,
value: parseFloat(data[i].Session_Load_Average).toFixed(2),
min: 0,
max: data[i].Session_Cpu_Count,
title: data[i].Session_Name,
label: "load"
}));
}
// Create main Server Gauge
gServer = new JustGage({
id: "gServer",
// truncate to 2 digits
value: parseFloat(Server_LoadAverage).toFixed(2),
min: 0,
max: Server_CpuCount,
title: "GridMan Server",
label: "load average"
});
}
});
// Write out label
document.write(Server_Sessions + "<p>sessions</p><BR>");
// Render All Sessions Gauges
// !! It does not work, ajax is async and Server_Sessions is 0
for (i = 0; i < Server_Sessions; i++)
{
document.write("<div id=\"g"+i+"\"></div>");
}
</script>
</body>
/*
*获取会话数和服务器状态
*会话数用于绘制每个会话的量规
*/
$.ajax({
url:url,
数据类型:“json”,
资料来源:jd,
成功:功能(数据)
{
//
Server\u CpuCount=data.Server\u Cpu\u Count;
Server\u LoadAverage=data.Server\u Load\u Average;
服务器会话=data.Server会话计数;
//为每个连接的会话创建仪表
对于(i=0;i
”;
//渲染所有会话
// !! 它不工作,ajax是异步的,服务器会话是0
对于(i=0;i
这部分不起作用,因为AJAX是异步生成的,因此服务器会话始终为0
for (i = 0; i < Server_Sessions; i++)
{
document.write("<div id=\"g"+i+"\"></div>");
}
for(i=0;i
如果此变量始终为0,如何绘制会话的量表?最初显示0个会话的量表,并在ajax调用的成功回调函数中使用正确的数字进行更新。这就是你知道你得到数据的地方。如果您不希望用户看到0个仪表,则将其隐藏,直到成功回调并再次显示。通过在ajax调用中使用回调函数修复了此问题
$.ajax({
url: url,
dataType: 'json',
data: jd,
success: function(data)
{
//
Server_CpuCount = data.Server_Cpu_Count;
Server_LoadAverage = data.Server_Load_Average;
Server_Sessions = data.Server_Sessions_Count;
// Create main Server Gauge
gServer = new JustGage({
id: "gServer",
// truncate to 2 digits
value: parseFloat(Server_LoadAverage).toFixed(2),
min: 0,
max: Server_CpuCount,
title: "GridMan Server",
label: "load average"
});
// Create Gauge for every session connected
for (i = 0; i < Server_Sessions; i++)
{
// **Add Gauge on to the web page**
$("body").append("<div id=\"g"+i+"\"></div>");
arr.push(new JustGage({
id: "g"+i,
value: parseFloat(data[i].Session_Load_Average).toFixed(2),
min: 0,
max: data[i].Session_Cpu_Count,
title: data[i].Session_Name,
label: "load"
}));
}
}
});
$.ajax({
url:url,
数据类型:“json”,
资料来源:jd,
成功:功能(数据)
{
//
Server\u CpuCount=data.Server\u Cpu\u Count;
Server\u LoadAverage=data.Server\u Load\u Average;
服务器会话=data.Server会话计数;
//创建主服务器仪表
gServer=new-JustGage({
id:“gServer”,
//截断为2位
值:parseFloat(服务器\加载平均值).toFixed(2),
分:0,,
max:Server\u CpuCount,
标题:“GridMan服务器”,
标签:“平均负荷”
});
//为每个连接的会话创建仪表
对于(i=0;i
这就是您有一个回调的原因。使用它。哦,而且,它在回调中无论如何都不会起作用。你说的“更新它们”可能是重复的。如果我没有显示仪表(意味着我不包括),java脚本将弹出一个警报,说明g0、g1、g2(仪表)未定义。可能会创建一个空容器div并给它一个id。将渲染代码移动到一个函数,使其不会在页面加载时运行,而不是在document上运行。使用document.getElementById(“包装器”)。innerHTML=。。。或类似的。在您的成功回调中调用它来呈现gauges.Dis类似的内容,但将$(“body”).append(“”);在ajax回调函数中,这至少很有效。