2

ajax を使用して div を追加し、エラー メッセージを表示しようとしています。しかし、正しいエラー メッセージの代わりに、毎回 null が表示されます。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;
}
4

2 に答える 2

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 ページは常に値を返すとは限らないため、何が起こっているのかを知るのは困難です。これを回避するには、ページが空になったときにエコーされた PHP データを保持する JavaScript 変数を使用します。しかし、これはあなたの場合にはうまくいきません。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>');
            }
        }
});

これは必ずしも意図したとおりに機能するとは限りませんが、構築するための良い出発点です。

于 2013-03-12T05:43:07.150 に答える
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;
}
于 2013-03-12T06:37:40.117 に答える