用window.setInterval这样的JS代码5秒调用一次,结果IE报警:
该页面上的脚本造成ie运行缓慢,如果继续运行你的计算机会变得更慢? 
代码如下:
<body onload="gLStat()">
    <form id="form1" runat="server">
            <asp:ScriptManager ID="ScriptManager1" runat="server">
                <Services>
                <asp:ServiceReference Path="Svs_Login.asmx" />
                </Services>
            </asp:ScriptManager>
            <script type="text/javascript">
            function gLStat(){
                 var ws=new Svs_Login();
                 ws.gLoginState(onCompleted);                    function onCompleted(result) {
                        var ar=result.split(",");
                        if(ar[0]=="true")
                        {
                            document.getElementById("div_Login").style.display='none';
                            document.getElementById("div_Logout").style.display='';
                            txt_msgCount.innerHTML = ar[5];
                        }
                        else
                        {
                            document.getElementById("div_Login").style.display='';
                            document.getElementById("div_Logout").style.display='none';
                        }
                    }
window.setInterval(gLStat(), 5000);
                }
            </script>
      <div id="div_Login">请登录</div>
      <div id="div_Logout">您已经登录,当前共有<span id="txt_msgCount"></span>条未读消息</div>      
    </form>
</body>webservice为Svs_Login.asmx,是没有问题的,返回值正确,也能接收并显示,就是运行起来很慢咋办?
是不是用scriptmanager效率会比自己写xmlhttprequest对象低很多?
InlineScript="true"不管用,结果更慢

解决方案 »

  1.   

    #1楼,数据不长啊,返回值很就6个字符串,用“,”隔开的,就存放用户ID、是否登录、未读消息数量什么的。
    你说的操作的数据过长是指什么?webservice里面的处理过程太长吗?因为要从数据库里读一些东西。
    自己写xmlhttprequest对象会不会就不报这个了??
      

  2.   

    #1楼,数据不长啊,返回值就6个字符串拼接成,用“,”隔开,就存放用户ID、是否登录、未读消息数量什么的。
    你说的操作的数据过长是指什么?webservice里面的处理过程太长吗?因为要从数据库里读一些东西。
    如果手写xmlhttprequest对象会不会就没这问题了?
      

  3.   

    囧RZ,刚才浏览器又崩溃了,在崩溃之前提交了回复,我以为没成功,结果重复发了一帖。好象不能删掉
    有过这方面应用的讲讲啊,不用setInterval可以做到几秒钟查询一次吗?
      

  4.   

    我用juqery调用时也遇到过,那次好像是分页吧,每次把table清空就出错,时间不一,后来实在找不出了,就重打了一遍就好了。。
      

  5.   

    我在想是不是我的JS代码有问题啊?还有ScriptManager是这么用的吗?现在我用xmlhttprequest,运行到
    xmlhttp.open("GET", "Svs_Login.asmx/gLoginState", true);
    这一句就out of memory了
      

  6.   

    有了新发现,
    用顶楼的代码,window.setInterval(gLStat(), 5000); 这句话有问题
    不是5秒,而是连续不断地一直在回调
    谁知道这是怎么回事吗?
      

  7.   

    产生了死循环            <script type="text/javascript">
                function gLStat(){
                    var ws=new Svs_Login();
                    ws.gLoginState(onCompleted);
                              <---------后面的大括号应该一定到这里吧
                        function onCompleted(result) {
                            var ar=result.split(",");
                            if(ar[0]=="true")
                            {
                                document.getElementById("div_Login").style.display='none';
                                document.getElementById("div_Logout").style.display='';
                                txt_msgCount.innerHTML = ar[5];
                            }
                            else
                            {
                                document.getElementById("div_Login").style.display='';
                                document.getElementById("div_Logout").style.display='none';
                            }
                        }
    window.setInterval(gLStat(), 5000);
                    }   <----------------这里的大括号应该移动到前面去吧。
                </script> 
      

  8.   

    感谢#8楼,你的思路是对的,我也发现了。
    我现在把window.setInterval(gLStat, 5000);拿到大括号外面就行了。至于onCompleted写在哪里无所谓。
    一开始我是写在外面的,但老是报window.setInterval(gLStat(), 5000);缺少第一个参数,后来放到大括号里就不报错了。
    现在搞明白window.setInterval()调用的第一个参数是gLStat,要去掉()才可以
    马上结帖给分