Ajax从php获取值?

时间:2013-03-12 05:09:09

标签: javascript php jquery ajax

我正在尝试使用ajax添加div来显示错误消息。但是,每次都得到null,而不是正确的错误消息。

的结果
<?php echo json_encode($_SESSION['msg']['login-err']); ?>;

我该如何解决这个问题?为什么显示为null?

JavaScript的:

            $(document).ready(function(){
            $("#open").click(function(){
                $("#register").fadeIn(500);
            });
            $("#close").click(function(){
                $("#register").fadeOut(500);
            });
            $("#log").click(function(){
                username=$("#username").val();
                password=$("#password").val();
                submit=$("#log").val();
                $.ajax({
                    type: "POST",
                    url: "",
                    data: "submit="+submit+"&username="+username+"&password="+password,
                    success: function(html) {
                        if(html==true) {

                        }
                        else {
                            $("#error-log").remove();
                            var error_msg = <?php echo json_encode($_SESSION['msg']['login-err']); ?>;
                            $("#s-log").append('<div id="error-log" class="err welcome dismissible">'+error_msg+'</div>');
                            <?php unset($_SESSION['msg']['login-err']); ?>
                        }
                    }
                });
                return false;
            });

members.php:

<?php if(!defined('INCLUDE_CHECK')) header("Location: ../index.php"); ?>
<?php

require 'connect.php';
require 'functions.php';
// Those two files can be included only if INCLUDE_CHECK is defined


session_name('Login');
// Starting the session

session_set_cookie_params(7*24*60*60);
// Making the cookie live for 1 week

session_start();

if($_SESSION['id'] && !isset($_COOKIE['FRCteam3482Remember']) && !$_SESSION['rememberMe'])
{
    // If you are logged in, but you don't have the FRCteam3482Remember cookie (browser restart)
    // and you have not checked the rememberMe checkbox:

    $_SESSION = array();
    session_destroy();

    // Destroy the session
}


if(isset($_GET['logoff']))
{
    $_SESSION = array();
    session_destroy();

    header("Location: ../../index.php");
    exit;
}

if($_POST['submit']=='Login')
{
// Checking whether the Login form has been submitted

$err = array();
// Will hold our errors


if(!$_POST['username'] || !$_POST['password'])
    $err[] = 'All the fields must be filled in!';

if(!count($err))
{
    $_POST['username'] = mysql_real_escape_string($_POST['username']);
    $_POST['password'] = mysql_real_escape_string($_POST['password']);
    $_POST['rememberMe'] = (int)$_POST['rememberMe'];

    // Escaping all input data

    $row = mysql_fetch_assoc(mysql_query("SELECT id,usr FROM members WHERE usr='{$_POST['username']}' AND pass='".md5($_POST['password'])."'"));

    if($row['usr'])
    {
        // If everything is OK login

        $_SESSION['usr']=$row['usr'];
        $_SESSION['id'] = $row['id'];
        $_SESSION['rememberMe'] = $_POST['rememberMe'];

        // Store some data in the session

        setcookie('FRCteam3482Remember',$_POST['rememberMe']);
    }
    else $err[]='Wrong username and/or password!';
}

if($err) {
    $_SESSION['msg']['login-err'] = implode('<br />',$err);
    // Save the error messages in the session

    header("Location: index.php");
}
else
    header("Location: workspace/index.php");
    echo 'true';
exit;
}

2 个答案:

答案 0 :(得分:1)

通常,AJAX请求向PHP页面发出请求,返回值。它通常是JSON但不一定是。这是一个例子。

$.ajax({
    type: "POST",
    url: "a request URL",
    data:{
        'POST1':var1,
        'POST2':var2
        }
    success: function(result)
        {
        //Do something based on result. If result is empty. You have a problem.
        }
});

您的PHP页面并不总是返回值因此很难知道最新情况。你的解决方法是使用javascript变量,当你的页面返回空时,它会保存回显的PHP数据。但这对你的情况不起作用。将PHP变量回传到javascript中可能会偶尔正常工作,但这不是一个好习惯。

它不适用于您的情况,因为您的javascript变量是在首次加载页面时设置的。此时变量$_SESSION['msg']['login-err']尚未设置(或者可能包含一些不相关的数据),这也是您的javascript变量也将保留的。

按照我提到的方式执行此操作时,您还可以使用console.log(result)alert(result)等函数手动查看PHP页面的结果并修复任何问题。

我建议做类似以下的事情。

if($err) {
    $_SESSION['msg']['login-err'] = implode('<br />',$err);
    echo $_SESSION['msg']['login-err'];
}
else
    echo 'success';
}

的Javascript

$.ajax({
        type: "POST",
        url: "",
        data: "submit="+submit+"&username="+username+"&password="+password,
        success: function(response) {
            if(response=='success') {
                alert("Woo! everything went well.  What happens now?");
                //do some stuff
            }
            else {
                alert("oh no, looks like we ran into some problems.  Response is"+ response);
                $("#error-log").remove();
                var error_msg = response;
                $("#s-log").append('<div id="error-log" class="err welcome dismissible">'+error_msg+'</div>');
            }
        }
});

这可能不一定完全符合您的预期,但它是您开始构建的良好开端。

答案 1 :(得分:0)

通过浏览代码,您似乎首先进行重定向,然后发送响应。

以下代码段中存在错误

if($err) {
    $_SESSION['msg']['login-err'] = implode('<br />',$err);
    // Save the error messages in the session

    header("Location: index.php");
}
else
    header("Location: workspace/index.php");
    echo 'true';
exit;
}