刷新后JQuery代码停止工作

时间:2017-02-20 21:34:08

标签: javascript php jquery html ajax

我目前正在创建一些我正在创建的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将控制台记录正确的数据...只是不显示在跨度?我错过了什么?刷新页面时,是否刷新了新数据内容?

2 个答案:

答案 0 :(得分:1)

只有页面存在,“state”的值才存在。重新加载页面时,将破坏页面的上一个副本,并从服务器下载新副本(或者,可能从缓存中检索)。所有内容都会重置为其初始值,就好像之前版本的页面从未存在过一样。这是设计 - 网络本质上是“无国籍”(哦,具有讽刺意味)。

如果您希望在页面加载之间保持“state”的值,则需要以某种方式保留它。一种明显而直接的方法是在服务器上维护$_SESSION中的值,并使用PHP将其当前值注入JavaScript,以便在页面加载时使用。

答案 1 :(得分:0)

谢谢大家的帮助! 我设法让我的状态变量保持不变,最后不得不使用setTimeOut事件。我发现我的ajax请求正在发送和接收所有正确的数据,问题出在我的 jquery中!

我将jquery转换为常规JS,并且控制台吐出一个错误,指出无法访问&#39; x&#39;的内部HTML。元件。 我的jquery代码在创建之前尝试访问该元素,但jquery不会产生错误。

我在CheckSwitch()函数调用和繁荣期间只是添加了一个setTimeOut事件,虽然有点延迟但它有效!

编辑:经过更多的研究,我所有麻烦的原因是我正在使用的排版插件! (捂脸)。我实际上是用字母写出所有内容,这些字母只会在完全输入后创建元素。 setTimeOut事件只是让插件有足够的时间来输入它。我现在已经修好了所有东西,所以两个人不再依赖。 :)