javascript - ajax 调用正在堆叠

标签 javascript ajax jquery

所以标题说明了发生的事情。我有一个 ajax 调用,如果成功,它会发出另一个 ajax 调用,但问题是在该调用完成之前,它已经发出了另一个 ajax 调用,并且 ajax 开始堆叠。我使用异步,并使用php作为我的服务器语言。我的 ajax 的超时时间也是 5 秒 = 5000 毫秒。 因此,它会轮询服务器,同时等待,然后 javascript 执行新的 ajax 调用,甚至在另一个调用返回信息之前。

这是我的 jquery ajax 调用

 $.ajax({
                url: ("json/getfriends.php"),
                type: 'POST',
                data: {friendlist: friendsarray},
                async: false,
                timeout: 5000,  
                dataType: 'json',       
                success: function(data){                
                    $.each(data, function(i, val){
                        friendsarray.push(val);                 
                    });
                    setTimeout("friends();", 15000); //loops the ajax call

                },
                error: function(jqXHR, textStatus, errorThrown) 
                {
                    if (errorThrown['code'] == 101){
                        //time out, not data was received 
                        setTimeout("friends();", 15000); //loops the ajax call
                    }
                    else
                    {
                        console.log(errorThrown);
                    }
                }
            });

所以我的问题是如何停止 ajax 相互堆叠,或者如何使一个 ajax 调用仅在另一个调用带回数据后才进行。

so here is a image and the aftermath

my full javascript

最佳答案

底线是,您所显示的代码没有出现问题。

但是,full JavaScript您添加的有一个重大问题:

...
setTimeout(chat_check(), 20000);    
...

看到了吗?它立即从成功处理程序中运行 chat_check()。这不是一个好主意!

应该是这样的:

setTimeout(chat_check, 20000);

它将函数引用作为第一个参数传递,而不是函数结果。您可能希望对您的 friends() 调用应用相同的方法:

setTimeout(friends, 15000);

编辑

顺便说一句,我不确定您为什么使用 async: false,但这样做对于用户体验来说并不是很好,因为浏览器在请求期间将无响应。

使用默认的异步模式会更好:)

关于javascript - ajax 调用正在堆叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13896438/

相关文章:

javascript - Aptana 提示 JavaScript 分号

javascript - app.setBadgeCount 不起作用

javascript - 在单个 ajax 响应中获取父对象和子对象

javascript - 自动将用户电子邮件插入表单 jQuery

javascript - 使用 JavaScript 以编程方式提醒 Bing map 上的纬度/经度值

c# - 在 C# 中从未知的 JSON 内容创建一个无序列表

javascript - DNA配对问题。如何确保我们忽略无效字符

javascript - javascript中的uudecode算法

javascript - 通过ajax加载javascript

javascript - 防止对 PHP 的虚假循环 ajax 请求