<script type="text/javascript">var hostid; var host_name; var xmlhttp; var result; var result1; var res; var r=""; var _count = 0; var _excute = true; function myUpdate() { _count++; _excute = false; if (window.XMLHttpRequest) { xmlhttp = new XMLHttpRequest(); if (xmlhttp.overrideMimeType) { xmlhttp.overrideMimeType("text/xml"); } } if (xmlhttp == undefined || xmlhttp == null) { alert("当前的浏览器不支持xmlhttprequest对象,请更新浏览器"); return; }
//2.注册回调方法,希望在服务器端的数据在返回给我们的浏览器的时候,可以调用我们的回调函数 xmlhttp.onreadystatechange = myCallBack; //3.设置和服务器端交互的参数 var timestamp = Date.parse(new Date()); if (hostid != undefined) {
//alert("send data to "+hostid);
xmlhttp.open("post", "bulitOpenChart!built?time=" + timestamp + "&hostid=" + hostid + "&pid=" + '${pid}', true); } else { //alert("fasong"); xmlhttp.open("post", "bulitOpenChart!built?time=" + timestamp + "&hostid=1" + "&pid=" + '${pid}', true); } //4.设置向服务器发送的数据,启动和服务器端的交互 xmlhttp.send(null);} function myCallBack() { //alert("后台返回数据了吗?"); //5.判断和服务器端的交互是否完成,还要判断服务器端是否正确的返回了数据 if (xmlhttp.readyState == 4) { //表示和服务器端的交换已经完成 if (xmlhttp.status == 200) { //表示服务器返回了正确的信息 var message = xmlhttp.responseText; //alert("返回数据为:"+message); try{ result = message.split("mm")[0]; result1 = message.split("mm")[3]; r = message.split("mm")[2]; res = message.split("mm")[1]; var infos = r.split("_"); }catch(e) { } if (!(r == "0" || r == 0 | r == undefined|r=="")) { //check document.getElementById("risk").innerHTML = infos[0]; document.getElementById("attack_src_ip").innerHTML = infos[4]; document.getElementById("src_port").innerHTML = infos[5]; document.getElementById("attacktype").innerHTML = infos[6]; if (host_name == undefined) host_name = "无"; document.getElementById("net").innerHTML = host_name; var risk = infos[1];
因为struts2针对每次请求都会实例化一个新的Action的,所以应该不会存在你说的堵塞情况。
用firebug看一下你的请求和响应~
我也觉得不冲突,但是他每次发送请求过来之后,未得到相应的时候第二次甚至第三次的请求都来了,但是没有返回数据给前台呀,我还说了,我用的是Ajax,所以就不得去调用success方法
我配置了prototype的,但是第一次请求还未完成(此时还在进行业务逻辑处理),第二次又来了,我在页面上打印返回的结果,始终没有办法响应,其次,我在前台alert数据的时候也总是空的,也就是此时并没有返回数据,是不是因为前台一直发送请求的原因我的解决办法是只有一次请求完成之后才处理第二次请求即:
我定义了一个全局staic变量
private static boolean flag=true;
Struts中:
if(flag){
flag=false;
dosomething();returnToView;
flag=true;
}
赞同5楼的说法,你这应该是前台js代码的问题,可能与后台没啥关系。
赞同5楼的说法,你这应该是前台js代码的问题,可能与后台没啥关系。
但是我必须保证前台一直向后台发送数据呀!因为有这个需求,那前台如何改呢?我那种改法有问题吗?
赞同5楼的说法,你这应该是前台js代码的问题,可能与后台没啥关系。
赞同5楼的说法,你这应该是前台js代码的问题,可能与后台没啥关系。
但是我必须保证前台一直向后台发送数据呀!因为有这个需求,那前台如何改呢?我那种改法有问题吗?
你的js代码都没有贴出来,谁知道该怎么帮你呢?
赞同5楼的说法,你这应该是前台js代码的问题,可能与后台没啥关系。
赞同5楼的说法,你这应该是前台js代码的问题,可能与后台没啥关系。
但是我必须保证前台一直向后台发送数据呀!因为有这个需求,那前台如何改呢?我那种改法有问题吗?
你的js代码都没有贴出来,谁知道该怎么帮你呢?
<script type="text/javascript">var hostid;
var host_name;
var xmlhttp;
var result;
var result1;
var res;
var r="";
var _count = 0;
var _excute = true;
function myUpdate() { _count++;
_excute = false;
if (window.XMLHttpRequest) {
xmlhttp = new XMLHttpRequest();
if (xmlhttp.overrideMimeType) {
xmlhttp.overrideMimeType("text/xml");
}
}
if (xmlhttp == undefined || xmlhttp == null) {
alert("当前的浏览器不支持xmlhttprequest对象,请更新浏览器");
return;
}
//2.注册回调方法,希望在服务器端的数据在返回给我们的浏览器的时候,可以调用我们的回调函数
xmlhttp.onreadystatechange = myCallBack;
//3.设置和服务器端交互的参数
var timestamp = Date.parse(new Date());
if (hostid != undefined) {
//alert("send data to "+hostid);
xmlhttp.open("post", "bulitOpenChart!built?time=" + timestamp
+ "&hostid=" + hostid + "&pid=" + '${pid}', true);
} else {
//alert("fasong");
xmlhttp.open("post", "bulitOpenChart!built?time=" + timestamp
+ "&hostid=1" + "&pid=" + '${pid}', true);
} //4.设置向服务器发送的数据,启动和服务器端的交互
xmlhttp.send(null);}
function myCallBack() {
//alert("后台返回数据了吗?");
//5.判断和服务器端的交互是否完成,还要判断服务器端是否正确的返回了数据
if (xmlhttp.readyState == 4) {
//表示和服务器端的交换已经完成
if (xmlhttp.status == 200) { //表示服务器返回了正确的信息
var message = xmlhttp.responseText;
//alert("返回数据为:"+message);
try{
result = message.split("mm")[0];
result1 = message.split("mm")[3];
r = message.split("mm")[2];
res = message.split("mm")[1];
var infos = r.split("_");
}catch(e)
{
}
if (!(r == "0" || r == 0 | r == undefined|r=="")) {
//check
document.getElementById("risk").innerHTML = infos[0];
document.getElementById("attack_src_ip").innerHTML = infos[4];
document.getElementById("src_port").innerHTML = infos[5];
document.getElementById("attacktype").innerHTML = infos[6];
if (host_name == undefined)
host_name = "无";
document.getElementById("net").innerHTML = host_name;
var risk = infos[1];
if (risk == 1) {
infos[1] = '正常';
} else if (risk == 2) {
infos[1] = "较低风险";
} else if (risk == 3) {
infos[1] = "低风险";
} else if (risk == 4) {
infos[1] = "中等危险";
} else if (risk == 5) {
infos[1] = "较高危险";
} else if (risk == 6) {
infos[1] = "极高危险";
} else if (risk == 7) {
infos[1] = "极度危险";
} document.getElementById("riskrank").innerHTML = infos[1];
} else {
document.getElementById("risk").innerHTML = 0;
document.getElementById("attack_src_ip").innerHTML = "无";
document.getElementById("src_port").innerHTML = "无";
document.getElementById("attacktype").innerHTML = "无";
if (host_name == undefined)
host_name = "无";
document.getElementById("net").innerHTML = host_name;
document.getElementById("riskrank").innerHTML = "正常"; }
mychart();
}
jiankong();
_count=0;
if(!_excute)
{
//四秒钟发送一次不可以吗?
setTimeout("myUpdate()", 15000)
_excute = true;
};
}else
{
_count--;
if(_count==0)setTimeout("myUpdate()", 15000);
}
}
function mychart() {
try{
if (result != undefined) {
var data = result.split("_")[0];
var time = result.split("_")[1];
var t = time.split(",");
}
var so = new SWFObject("Plug/actionscript/open-flash-chart.swf", "ofc",
"360", "160", "9", "#FFFFFF");
so.addVariable("variables", "true");
so.addVariable("title", "整体网络风险,{font-size:10px,font-weight:bolder}");
so.addVariable("y_label_size", "15");
so.addVariable("y_ticks", "5,7,4");
so.addVariable("x_axis_colour", "#000000");
so.addVariable("x_grid_colour", "#ADB5C7");
so.addVariable("y_axis_colour", "#000000");
so.addVariable("y_grid_colour", "#ADB5C7");
so.addVariable("line", "1,0xFF0000");
so.addVariable("bg_colour", "#FFFFFF");
if (t == undefined) {
so
.addVariable(
"values",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0");
///so.addVariable("x_labels",t[4]+",,,,,,,,,,,,,,,,,,,,,,,,"+t[3]+",,,,,,,,,,,,,,,,,,,,,,,,"+t[2]+",,,,,,,,,,,,,,,,,,,,,,,,"+t[1]+",,,,,,,,,,,,,,,,,,,,,,,,"+t[0]);
so
.addVariable(
"x_labels",
"00:00:00.0,,,,,,,,,,,,,,,,,,,,,,,,00:00:00.0,,,,,,,,,,,,,,,,,,,,,,,,00:00:00.0,,,,,,,,,,,,,,,,,,,,,,,,00:00:00.0,,,,,,,,,,,,,,,,,,,,,,,,00:00:00.0");
} else {
var resu = data.split(",");
var pp = "";
for ( var x = resu.length - 1; x >= 0; x--) {
if (x == 0) {
pp += resu[x];
} else {
pp += resu[x] + ",";
}
}
so.addVariable("values", pp);
so.addVariable("x_labels", t[4] + ",,,,,,,,,,,,,,,,,,,,,,,," + t[3]
+ ",,,,,,,,,,,,,,,,,,,,,,,," + t[2]
+ ",,,,,,,,,,,,,,,,,,,,,,,," + t[1]
+ ",,,,,,,,,,,,,,,,,,,,,,,," + t[0]);
}
so.addVariable("x_axis_steps", "24");
so.addVariable("y_max", "100");
so.addVariable("y_min", "0");
so.write("my_chart");
mychart1();
}catch(e){}}
</script>
<script type="text/javascript">
function mychart1() {try{
if (result1 != undefined) {
var data1 = result1.split("_")[0];
var time1 = result1.split("_")[1];
var t1 = time1.split(",");
}
var so = new SWFObject("Plug/actionscript/open-flash-chart.swf", "ofc",
"360", "160", "9", "#FFFFFF");
so.addVariable("variables", "true");
if (t1 != undefined) {
so.addVariable("title", host_name
+ ",{font-size:10px,font-weight:bolder}");
} else {
so
.addVariable("title",
"某个主机的风险情况,{font-size:10px,font-weight:bolder}");
}
so.addVariable("y_label_size", "15");
so.addVariable("y_ticks", "5,7,4");
so.addVariable("x_axis_colour", "#000000");
so.addVariable("x_grid_colour", "#ADB5C7");
so.addVariable("y_axis_colour", "#000000");
so.addVariable("y_grid_colour", "#ADB5C7");
so.addVariable("line", "1,0xFF0000");
so.addVariable("bg_colour", "#FFFFFF");
if (t1 == undefined) {
so
.addVariable(
"values",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0");
so
.addVariable(
"x_labels",
"00:00:00.0,,,,,,,,,,,,,,,,,,,,,,,,00:00:00.0,,,,,,,,,,,,,,,,,,,,,,,,00:00:00.0,,,,,,,,,,,,,,,,,,,,,,,,00:00:00.0,,,,,,,,,,,,,,,,,,,,,,,,00:00:00.0");
} else { var resu1 = data1.split(",");
var pp1 = "";
for ( var x = resu1.length - 1; x >= 0; x--) {
if (x == 0) {
pp1 += resu1[x];
} else {
pp1 += resu1[x] + ",";
}
} so.addVariable("values", pp1);
so.addVariable("x_labels", t1[4] + ",,,,,,,,,,,,,,,,,,,,,,,," + t1[3]
+ ",,,,,,,,,,,,,,,,,,,,,,,," + t1[2]
+ ",,,,,,,,,,,,,,,,,,,,,,,," + t1[1]
+ ",,,,,,,,,,,,,,,,,,,,,,,," + t1[0]);
}
;
so.addVariable("x_axis_steps", "24");
so.addVariable("y_max", "100");
so.addVariable("y_min", "0");
so.write("my_chart1");
}catch(e)
{}
}
</script>
xmlhttp.open("post", "bulitOpenChart!built?time=" + timestamp
+ "&hostid=" + hostid + "&pid=" + '${pid}', true);
这个true 就是表示异步的, 你把他改成false 试一下!
什么叫找不到对应的AJAX, 不是有 xmlhttp = new XMLHttpRequest()么, 每次都是新的对象。 如果没有返回肯定是后台的原因! 后台阻塞不阻塞跟spring的单例还是多例也没关系,难道你action中有同步块么。 代码一步步跟进去看,总能找到问题的, 我觉得最有可能是数据库堵了。