请问一下,我一个页面有几个AJAX获取JSON,而且是每秒执行一次,可是时间一长,读出来的JSON数据就会出现混乱,这是怎么回事呀,我用的jquery.ajax
比如说 a 和b 两个ajax获取json数据,a却获得了b的数据,b获得a的数据,乱套了
时间一长,这两个信息显示就不正常,然后用firebug查了一下,他们两个获取的json数据不对,两个乱掉了,请问各位大大,这到底咋回事啊
//这是第一个,用于实时更新节点树的状态var treeurl = '<%= Url.Action("GetTreeView","Main") %>';
jQuery.ajax({
type: "post",
url: treeurl + "?num=" + Math.random(),
// async: false,
cache: false,
Date: "json",
success: function (TreeData) {
if (TreeData && TreeData.length > 1) {
d = new dTree('d');
d.add(0, -1, '实时监控');
for (var i = 0; i < TreeData.length; i++) {
var statico = "Green.gif";
switch (TreeData[i].NodeStatus) { //判断当前节点状态,选择图标
case "0": statico = "Green.gif"; break;
case "1": statico = "Yellow.gif"; break;
case "2": statico = "Orange.gif"; break;
case "3": statico = "Red.gif"; break;
default: statico = "Gray.gif";
}
var urls = '../NodeInfo/Display/' + TreeData[i].Id + '.aspx'; //Url
//添加子节点
d.add(TreeData[i].Id, TreeData[i].ParentID, TreeData[i].NodeName, urls, TreeData[i].NodeName, 'RightFrame', '../../Repository/Image/tree-images/' + statico, '../../Repository/Image/tree-images/' + statico);
}
document.getElementById("divtree").innerHTML = d;
}
}
})
//这是第二个,用于显示当前节点下的所有节点信息,有tooltip 大家可以略过哦
var nodeurl = '<%=Url.Action("DisplayNodeInfo","NodeInfo",new { id=ViewData["NodeID"] }) %>';
jQuery.ajax({
type: "post",
url: nodeurl + "?num=" + Math.random(),
// async: false,
cache: false,
Date: "json",
success: function (NodeData) {
if (NodeData && NodeData.length > 0) {
document.getElementById("box").innerHTML = "";
for (var i = 0; i < NodeData.length; i++) {
var imagename = "";
var nodestat = "";
switch (NodeData[i].NodeStatus) {
case "0": nodestat = "正常"; imagename = NodeData[i].PicA; break;
case "1": nodestat = "一般告警"; imagename = NodeData[i].PicB; break;
case "2": nodestat = "重要告警"; imagename = NodeData[i].PicC; break;
case "3": nodestat = "严重告警"; imagename = NodeData[i].PicD; break;
default: imagename = NodeData[i].PicA;
}
//ToolTip提示信息
var titlecontent = [];
titlecontent.push("");
titlecontent.push(" ");
titlecontent.push(" ");
var value = NodeData[i].NodeValue;
if (value) {
value = value.split("|");
for (var j = 0; j < value.length; j++) {
var valuekey = value[j].split("=");
if (valuekey[0] && valuekey[0] != "") {
titlecontent.push("");
}
}
}
titlecontent.push("");
节点状态: " + nodestat + " 节点类别: " + NodeData[i].NodeType + " 节点编号: " + NodeData[i].Id + " 节点名称: " + NodeData[i].NodeName + " " + valuekey[0] + " " + valuekey[1] + "
adddiv(NodeData[i].Id, NodeData[i].XPosition, NodeData[i].YPosition, imagename, titlecontent.join('\n'), NodeData[i].NodeName);
}
jQuery('#tooltip').remove(); //要删除的
GetToolTip();
}
}
});
怎么个混乱?服务器器输出混乱?
哥们你要把问题说明白啊。最好有截图。有源码片段
是因为AJAX响应时间的问题!每秒执行一次的话。只要响应时间超过一秒了。JS对象一口气接受了不止一个返回值就会这样。建议想办法,获取好对象之后在等待1秒后再读取数据。可以通过一个全局变量给定时程序做判断。或者用其他办法。
用线程休眠一秒啊!
你可以试着给每个ajax请求编个号,比如请求 {"data"="xxxxx",num=1},{"data"="xxxxx",num=2}...,然后服务器端把这个num返回,客户端的js就可以根据这个num找到相应的处理函数。
加Q: 1030365071,具体了解后,给你解答
希望可以说的更加详细一点,来点代码看看也更好
ajax执行参数中加入一个变量 比如 new Date().toString()