大佬教程收集整理的这篇文章主要介绍了jquery – 使用setTimeout定期进行自动完成的AJAX调用?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
这就是我所拥有的.这显然不正确,但我不确定setTimeout函数是如何工作的.
function autoComplete(q,sucC) { setTimeout( if(q != "") { $.ajax({type:"GET",url: "PHP/search.PHP",data: "q="+q,success: succ }); },1000); }
我认为@R_935_10675@用clearTimeout,以便如果进行另一次调用,它将重置计时器并等待另一个1秒,但是当我尝试实现它时,它停止运行该函数.
使用匿名函数可能如下:
var timeoutId function autoComplete(q,sucC) { if (q) { // stop prevIoUs timeouts clearTimeout(timeoutId) timeoutId = setTimeout(function () { $.ajax({type:"GET",success: succ }); },1000); } }
注意我在外面移动q的支票.这不会同时运行两次超时,但可能会有多个正在进行的请求.为了防范这种情况,成功的回调需要一个警卫 – 一个简单的方法就是使用一个计数器.使用setTimeout中的q检查“当前q”可能会导致细微的竞争条件.
var timeoutId var counter = 0 function autoComplete(q,sucC) { if (q) { // Increment counter to maintain separate versions counter++ var thisCounter = counter clearTimeout(timeoutId) timeoutId = setTimeout(function () { $.ajax({type:"GET",success: function () { // Only call success if this is the "latest" if (counter == thisCounter) { succ.apply(this,arguments) } },}); },1000); } }
更智能的版本可能会在提交时读取当前值,因为上面的代码总是落后一秒……
var timeoutId var counter = 0 function autoComplete(getQ,sucC) { counter++ var thisCounter = counter clearTimeout(timeoutId) timeoutId = setTimeout(function () { var q = getQ() // get the q ... Now if (q) { $.ajax({type:"GET",success: function () { if (counter == thisCounter) { succ.apply(this,}); } },1000); } // example usage autoComplete(function () { return $(elm).val() },successCallBACk)
快乐的编码.
需要考虑的一点是,上面没有解决的问题是,可能仍有多个飞行中的请求(第二个示例中的警卫只显示如何“抛弃”旧的响应,而不是如何适当地限制请求).这可以通过短队列处理并防止提交新的AJAX请求,直到获得答复或足够的“超时”已到期并且该请求被视为无效.
以上是大佬教程为你收集整理的jquery – 使用setTimeout定期进行自动完成的AJAX调用?全部内容,希望文章能够帮你解决jquery – 使用setTimeout定期进行自动完成的AJAX调用?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。