发送jquery ajax $ .post后重置连接

时间:2015-03-28 19:57:13

标签: javascript php jquery ajax

我正在使用php,jquery,ajax制作游戏大厅。 我有一个字符串,它是一个jquery循环,它将ajax $ .post发送到另一个页面以检查并查看是否有人加入了玩家游戏,如果新用户在线并获得当前游戏加入。如果有,那么我用新数据填充页面上的div。

这是循环

<script>
    $(function() {
        getPage = function() {
            // this gets all current games users are trying to start up
            $.post("lobbyClasses.php",
            {
                lobbyRequest: "getGames",
            },
            function(data, status){
                if(status == "success"){
                    $("#joinGameContainer").html(data);
                    // this gets all online users and puts themin a div onlineUsers
                    $.post("lobbyClasses.php",
                    {
                        lobbyRequest: "getOnlineUsers",
                    },
                    function(data, status){
                        if(status == "success"){
                            $("#onlineUsers").html(data);
                            // start it again;
                            setTimeout(function(){
                                getPage();
                            }, 5000);
                        }else{
                            // get all online users failed start loop again
                            $("#onlineUsers").html("failed...");
                            setTimeout(function(){
                                getPage();
                            }, 5000);

                        }
                    });
                }else{
                    //get all games failed start loop again
                    $("#joinGameContainer").html("failed...");
                    setTimeout(function(){
                                getPage();
                    }, 5000);
                }
            });
        }
        getPage();
    });
    </script>

问题是这个循环有时只能工作而其他浏览器(chrome和firefox)会停止并给出错误(在firefox中重置连接)(chrome中没有返回数据)我认为嵌套post请求可能会有所帮助它确实显着,但它仍然不时发生。当我将另一个帖子发送到不同的页面时,例如以下内容也会发生更多......

$("#makeGame").click(function(){
    getGame = function() {
        $("#scripts").html("getting data...");
        $("#onlineUsers").html("getting data...");
        $("#joinGameContainer").html("getting data...");
        $("#gameContainer").html("getting data...");
        //alert("newgame was clicked.");
        $.post("cardgameclasses.php",
                {
                    gameRequest: "makeGame",
                },
                function(data, status){
                    // the code stalls here and dose nothing then the browser error happens 
                    //alert("Data: " + data + "\nStatus: " + status);
                    if(status == "success"){
                        $("#scripts").html(data);
                    }else{
                        $("#scripts").html("failed...");
                        setTimeout(function(){
                            getGame();
                        }, 5000);
                    }
                });
    }
    getGame();

所以我认为用文本替换循环然后发送帖子会有所帮助,但它确实做了一点点但有时我仍然得到浏览器错误连接重置。我不确定我做错了什么,请帮忙。

1 个答案:

答案 0 :(得分:1)

我弄清楚我的代码发生了什么PHP只允许对单个页面进行如此多的post vars以防止拒绝服务攻击。我发了太多帖子。我还意识到,我尝试使用ajax更新的所有内容都可以使用单个帖子而不是4个嵌套帖子进行更新。数据处理可以在服务器端完成。如果您为一个页面制作了几个帖子,那么您做错了。正确的代码是:

    function myTimer() {
    $.post("lobbyClasses.php",
    {
        lobbyRequest: "getContent1",
    },
    function(data, status){
        if(status == "success"){
            $("#lobbyContent").html(data);
        }else{
            $("#lobbyContent").html("failed...");
        }
    });
}
myTimer();
var myVar = setInterval(function(){ myTimer() }, 5000);

function myStopFunction() {
    clearInterval(myVar);
}