我正在使用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();
所以我认为用文本替换循环然后发送帖子会有所帮助,但它确实做了一点点但有时我仍然得到浏览器错误连接重置。我不确定我做错了什么,请帮忙。
答案 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);
}