javascript - Ajax 从 php 获取值?

标签 javascript php jquery ajax

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

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

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

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;
            });

成员.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;
}

最佳答案

通常,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>');
            }
        }
});

这可能不一定完全按照您的预期工作,但它是您继续前进的良好开端。

关于javascript - Ajax 从 php 获取值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15353744/

相关文章:

javascript - Laravel-Vue 单元测试错误 "SyntaxError: Unexpected token {"

javascript - Mysql OR 语句使用 AJAX 返回数组中的所有行名称值,然后在 Google Maps API V3 中加载多个标记

javascript - html 表格导出到 Excel 边框未显示在 Excel 工作表中

jquery - 怎么了? "add class when empty"脚本

javascript - 这个递归函数如何改变 'history' 变量?

javascript - HTML:动态 JavaScript 完全加载后

php - 为什么\n 特殊字符不使用 php 在 txt 文件中创建新行

PHP 核心警告 - yii\base\ErrorException - Yii2

php - 如何保存从 wysihtml5 生成的 HTML 或将其传递给 PHP 页面

javascript - JQuery 捕获输入值晚一个字符