解决方案 »

  1.   

    不冲突啊!每个请求完成,ajax都会去执行success或者error方法的
      

  2.   

    你的Action有没有配置scope=“prototype”?sp[align=right]ring容器默认作用域是单例的,所以你需要配置这个。
    因为struts2针对每次请求都会实例化一个新的Action的,所以应该不会存在你说的堵塞情况。
    用firebug看一下你的请求和响应~
      

  3.   


    我也觉得不冲突,但是他每次发送请求过来之后,未得到相应的时候第二次甚至第三次的请求都来了,但是没有返回数据给前台呀,我还说了,我用的是Ajax,所以就不得去调用success方法
      

  4.   


    我配置了prototype的,但是第一次请求还未完成(此时还在进行业务逻辑处理),第二次又来了,我在页面上打印返回的结果,始终没有办法响应,其次,我在前台alert数据的时候也总是空的,也就是此时并没有返回数据,是不是因为前台一直发送请求的原因我的解决办法是只有一次请求完成之后才处理第二次请求即:
    我定义了一个全局staic变量   
    private static boolean flag=true;
    Struts中:
         if(flag){
               flag=false;
            dosomething();returnToView;
    flag=true;
    }
      

  5.   

    我不定对不对,我说下我的理解:不是struts的问题,是前台AJAX的问题,你第一次发AJAX请求,值还没有返还回来,第二第三次接着又发,你说第一次的返回值是给谁呢?而当前的AJAX代码是等谁的呢?我的意思说,你第一次发的AJAX请求,在值返回的是他找不到对应的AJAX,而第二次回来,AJAX又变成了第三个的AJAX,唯一的解决方法就是在定时时间内把值返还回来,你可以把时间提长些看看,等值返回来再循环
      

  6.   

    ajax  里面  添加一个  async: false, 属性试试 , 这样应该就不会在第一次没有处理完的情况下,发送第二次请求了吧!
      

  7.   

    用的是传统的ajax,不是query的Ajax
      

  8.   


    赞同5楼的说法,你这应该是前台js代码的问题,可能与后台没啥关系。
    赞同5楼的说法,你这应该是前台js代码的问题,可能与后台没啥关系。
    但是我必须保证前台一直向后台发送数据呀!因为有这个需求,那前台如何改呢?我那种改法有问题吗?
      

  9.   


    赞同5楼的说法,你这应该是前台js代码的问题,可能与后台没啥关系。
    赞同5楼的说法,你这应该是前台js代码的问题,可能与后台没啥关系。
    但是我必须保证前台一直向后台发送数据呀!因为有这个需求,那前台如何改呢?我那种改法有问题吗?
    你的js代码都没有贴出来,谁知道该怎么帮你呢?
      

  10.   

    好吧,我还是贴出来吧!很多,要有心理准备哟
    赞同5楼的说法,你这应该是前台js代码的问题,可能与后台没啥关系。
    赞同5楼的说法,你这应该是前台js代码的问题,可能与后台没啥关系。
    但是我必须保证前台一直向后台发送数据呀!因为有这个需求,那前台如何改呢?我那种改法有问题吗?
    你的js代码都没有贴出来,谁知道该怎么帮你呢?
      

  11.   


    <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);

    }
    }
      

  12.   


    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>
      

  13.   


    xmlhttp.open("post", "bulitOpenChart!built?time=" + timestamp
                    + "&hostid=" + hostid + "&pid=" + '${pid}', true);
    这个true  就是表示异步的,  你把他改成false  试一下!
      

  14.   


    什么叫找不到对应的AJAX, 不是有 xmlhttp = new XMLHttpRequest()么, 每次都是新的对象。 如果没有返回肯定是后台的原因! 后台阻塞不阻塞跟spring的单例还是多例也没关系,难道你action中有同步块么。  代码一步步跟进去看,总能找到问题的, 我觉得最有可能是数据库堵了。