ajax调用正在堆叠

时间:2012-12-15 21:36:27

标签: javascript ajax jquery

所以标题类型说明会发生什么。我有一个ajax调用,如果它成功,它发出另一个,但问题是在一个完成之前它已经发出另一个,并且ajax开始堆叠。我使用async,并使用 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

1 个答案:

答案 0 :(得分:1)

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

但是,您添加的full JavaScript有一个主要问题:

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

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

应该是这样的:

setTimeout(chat_check, 20000);

它传递函数引用作为第一个参数,而不是函数结果。您可能希望在friends()电话中应用相同内容:

setTimeout(friends, 15000);

修改

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

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