日期:2014-05-16  浏览次数:20381 次

一个JS问题,有兴趣的哥们可以一起讨论下
在做一个特效,就是鼠标滑过一张小图的时候,然后触发一个onmouseover事件,然后去通过Ajax去请求一张图片,然后显示出来。

刚开始是这样的思路,实施之后,发现服务器的负载过高,原因是用户的鼠标随便滑过几张图就去请求,有很多时候是客户不需要的。

后来我想到了,用定时事件:

ds = window.setInterval('ajax(id, ds)',1200)

注:ajax是请求ajax的数据函数

之后问题出现了,就是他不断的自动去请求每隔1.2s就请求一次。比之前更糟糕了

于是我想出一个办法设置定时执行次数,默认为0,执行一次之后,次数+1,然后把这个值传递给ajax请求的参数里面,然后做判断:

function ajax(id,ds)
{

var imgpath = ''
$.get("/ajax.php",{id:id},function(data){
//这里的具体的业务逻辑省略
               
                //记录次数
       onmouseOverCuont +=1;
},
"text"
);
}
那样子就能解决这个问题。



鼠标移走之后就触发onmouseout事件的时候,执行:

onmouseOverCuont=0;window.clearInterval(ds);

以上代码在IE9, 火狐,chrome 浏览器没有任何问题。
但是在IE9以下,或者国产的那些IE内核的浏览器都会出现:
ds 未定义!


各位亲朋好友,帮忙看看!
祝愿大家新年快乐!

还有一小段代码是在网上找的,小弟才疏学浅,不明白,贴上来大伙儿给讲讲:

<html>
    <head>
        <script type="text/javascript">
            function test(_obj)
            {
                var iV = parseInt(_obj.value);
                _obj.value = iV+1;
                window.setTimeout(function(_obj2){return function(){test(_obj2)}}(_obj),10);
                _obj = null;
            };
        </script>
    </head>
    <body onload="test(document.getElementById('txt1'))">
        <input type="text" id="txt1" value="0" />
    </body>
</html> 
ajax html javascript

------解决方案--------------------
引用:
又想了下,也许问题在同步异步的区别。我们是采用同步 Ajax 传输,一个请求的响应还未完成时,系统不会理睬用户操作,毕竟 JS 是单线程系统。如果是异步 Ajax,多个请求会堆积起来,可能就有问题。


说的不错,不过出现未定义的情况,直接在开始的时候 var ds=0; 即可。

祝愿楼主好运!