php ajax post数据没有刷新但保存到 session 只适用于刷新

标签 php javascript jquery html ajax

我已经被这个问题困了两天了。我找到了无需刷新即可发布数据的代码,但似乎如果它不刷新,则这些值实际上并未保存到 $_SESSION 超全局。

我的 jquery 代码:

       $('.login_error').hide();
   $('#sublogin').click(function(){
   $('.login_error').hide();

   var jusername = $('#loginusername').val();
   var jpassword = $('#loginpassword').val();


   if(jusername == ""){        
       $('label#username_error').show();
   //return false;
   }       
   if(jpassword == ""){
       $('label#password_error').show();    
    return false;
   }
   var dataString = 'loginusername='+jusername+'&loginpassword='+jpassword;
    $.post('login.php', dataString, function(data) {
            $('#header').html("<div id='message'></div>");  
    $('#message').html("<h2>Contact Form Submitted!</h2>")  
    .append("<p>We will be in touch soon.</p>")  
    .hide()  
    .fadeIn(1500)   
    });
    //   return false
});

我的 login.php 代码:

<?php

//set the variables
$username   = isset($_POST['loginusername'])? $_POST['loginusername']:'';
$password   = isset($_POST['loginpassword'])? $_POST['loginpassword']:'';
$step       = isset($_POST['step']) ? $_POST['step'] : '1';
if($step=='2'){
    //validation is done in javascript
    //if there are no errors
    if(empty($loginErrors)){
    //sanitizes data for use in query.
    $username = trim(mysql_real_escape_string($username));
    $password = md5(trim(mysql_real_escape_string($password)));
    $query = "SELECT user_level, username, password FROM user WHERE username='$username' AND password='$password'";     
    $result = mysql_query($query) or die('query did not go through');       
    if($result!=false){         
        $query_row = mysql_fetch_assoc($result);
        $_SESSION['user_level']=$query_row['user_level'];
        $_SESSION['username']=$query_row['username'];
        $_SESSION['password']=$query_row['password'];
    }
    }
}
if($step=='1'){         

?>

<form class="login_fields" id="login_fields" name="login" method="POST">
    <input type="hidden" name="step" value="2"/>
    <div class="dtable">
    <div class="dtr">
        <span class="dtd"> 
        <label name="name_label" for="username_box"> Username </label> 
        </span>
        <span class="dtd">
        <input type="text" id="loginusername" name="loginusername" maxlength="25" value=""/>
        </span>
        <span class="tdt">
        <label for="username" id="username_error" class="login_error">Username field can not be blank</label>
        </span>
    </div>
    <div class="dtr"> 
        <span class="dtd"> 
        <label name="pass_label" for="username_box"> Password </label>
        </span>
        <span class="dtd">
        <input type="password" id="loginpassword" name="loginpassword" maxlength="20" value=""/> 
        </span>
        <span class="tdt">
        <label for="password" id="password_error" class="login_error">Password field can not be blank</label>
        </span>
    </div>
    <div class="dtr">
        <span class="dtd">
        <input type="submit" name="sublogin" id="sublogin" value="login"/>
        </span>
    </div>
    </div>
    <div class="output" id="output" name="output">
    </div>
</form>
<?php
}
?>

编辑:啊是的我忘了说。 login.php 包含在我的头文件中,我的头文件包含在我的 index.php 文件中,因此 session_start 应该级联。

编辑 2:因此,如果我在 jquery 代码的最后一行附近将 return 设置为 false,则页面不会重新加载,这正是我想要的,但 session 根本不会保存。任何人都能够弄清楚我正在做的事情有什么问题吗?

最佳答案

您应该在 PHP 脚本的顶部声明 session_start();,否则 SESSION 数据将不会被记住!!

关于php ajax post数据没有刷新但保存到 session 只适用于刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9244127/

相关文章:

php - PHP while 循环中的单选按钮

php - 如何将图像数据从一张表移动到另一张表?

javascript - 如何仅使用 Javascript 在 tbody 中添加数据

javascript - Toggle 在 Web 上工作但不在 CRM 2013 中工作的 Div

jquery - 在内容可编辑的 div 中的新行上触发事件

php - 如何连接两个MySQL表

php - Opencart 搜索引擎优化网址

javascript - jQuery - 内联调用函数

javascript - jQuery 构造函数中的函数有什么不同吗?

jquery - 为什么 JQuery.getJSON() 有 success 和 did 函数?