我目前正在创建一些我正在创建的php游戏的问题。一切都按照我需要的方式工作,直到我刷新页面,然后事情开始变得有点奇怪。我在下面提供了一些代码。
我的主要JS脚本“Main.js”
$(document).ready(function(){
//match boxheight
$('.box').matchHeight();
var state; //Variable to detect what "page" we are on. defaults to homepage or index.php
function CheckSwitch()
{
switch(state)
{
case "HomePage":
console.log("test");
break;
case "My Computer":
//($table,$col)
console.log("state active");
$.post("Data.php",{function_: "GetData",table:"virtualpc",col: "ip",},
function(data){$("#V_IP").text(data); console.log("My V_IP is: " +data);});
$.post("Data.php",{function_: "GetData",table:"virtualpc",col: "password",},
function(data){$("#V_Pass").text(data);});
break;
}
}
//Sign In Button Code
$("#SignInB").click(function()
{
var _password = $("#PasswordL").val();
var email = $("#EmailL").val()
if(email != "" && _password != "")
{
$.post("Login.php",
{
function_: "Login",
Lpass: _password,
Lemail: email
},
function(data){
if(data != 0)
{
$("#NewUserNav").hide(500);
$("#UserNavigation").show(1000);
$("#WelcomeMessage").hide(1000);
uid = data;
console.log("User ID: " +uid);
}
else
{
{$("#message").text("Incorrect login information!"); $("#message").css("color","white");}
}
});
}
else{$("#message").text("All fields required!"); $("#message").css("color","white");}
$.post("CheckSession.php",
{
function_: "SessionStat",
},
function(data){
state = data;
console.log("Current State: " + state);
CheckSwitch();
});
});
//End Sign In Button code
});
这是我检测到“SignInB”按钮单击并发送Ajax请求的地方。 ajax请求被发送到我的Data.php页面(此处的最后一个代码块),并回显响应。现在这完全没问题。唯一的问题是,当我刷新时,交换机中的jquery代码(大小写:“我的电脑”)不会执行。
我的html fie“CMD.html”
<div id = "CMD">
<span class="type-itCMD">
<h1 style = "text-align:center">My Computer</h1>
<h4 class="MyPCHeaders">My Information</h4>
<p class = "MyPCInfo">Virtual IP : </p><span class = "MyPCInfoText" id = "V_IP">xxxxx</span>
<p class = "MyPCInfo">Virtual Password : </p><span class = "MyPCInfoText" id = "V_Pass"></span>
</span>
</div>
我的Ajax文件,用于从数据库获取数据并将其发回
<?php
session_start();
include("functions.php");
if(isset($_POST['function_']) == "GetData")
{
$table = $_POST['table'];
$col = $_POST['col'];
GetData($table,$col);
}
function GetData($table,$col)
{
$id = $_SESSION['uid'];
$conn = connect();
$CheckData = mysqli_query($conn, "SELECT * FROM `{$table}` WHERE user_id = '$id' ") or die(mysqli_error($conn));
if(mysqli_num_rows($CheckData) == 1) //We found Data row!
{
$DataValue = mysqli_fetch_assoc($CheckData);
$MyValue = $DataValue[$col];
echo $MyValue;
}
}
?>
再次,当单击SignIn按钮时,将发送Ajax请求并收到响应! “我的电脑”案例中的jquery后来工作了!它只有一次我刷新并尝试再次调用switch语句(在单击SignIn按钮之外)jquery代码不起作用。我似乎无法想出这个,并且真的很喜欢一些帮助或建议!
编辑:我试过$(window).load(function() {});
没有运气。也许我用错了?
编辑编辑:我已经设法使用$ _Session和Ajax请求保持状态变量。我只是简单地调用此请求并在每个页面加载时获取状态会话。
$.post("CheckSession.php",
{
function_: "SessionStat",
},
function(data){
state = data;
console.log("Current State No Button: " + state);
CheckSwitch();
});
然后我再次运行CheckSwitch()函数检查开关并运行Jquery命令......现在发生了一些非常奇怪的事情。 jquery命令在刷新后不会更新html。然而,jquery将控制台记录正确的数据...只是不显示在跨度?我错过了什么?刷新页面时,是否刷新了新数据内容?
答案 0 :(得分:1)
只有页面存在,“state”的值才存在。重新加载页面时,将破坏页面的上一个副本,并从服务器下载新副本(或者,可能从缓存中检索)。所有内容都会重置为其初始值,就好像之前版本的页面从未存在过一样。这是设计 - 网络本质上是“无国籍”(哦,具有讽刺意味)。
如果您希望在页面加载之间保持“state”的值,则需要以某种方式保留它。一种明显而直接的方法是在服务器上维护$_SESSION
中的值,并使用PHP将其当前值注入JavaScript,以便在页面加载时使用。
答案 1 :(得分:0)
谢谢大家的帮助! 我设法让我的状态变量保持不变,最后不得不使用setTimeOut事件。我发现我的ajax请求正在发送和接收所有正确的数据,问题出在我的 jquery中!
我将jquery转换为常规JS,并且控制台吐出一个错误,指出无法访问&#39; x&#39;的内部HTML。元件。 我的jquery代码在创建之前尝试访问该元素,但jquery不会产生错误。
我在CheckSwitch()函数调用和繁荣期间只是添加了一个setTimeOut事件,虽然有点延迟但它有效!
编辑:经过更多的研究,我所有麻烦的原因是我正在使用的排版插件! (捂脸)。我实际上是用字母写出所有内容,这些字母只会在完全输入后创建元素。 setTimeOut事件只是让插件有足够的时间来输入它。我现在已经修好了所有东西,所以两个人不再依赖。 :)