使用AJAX发布和重定向后如何访问PHP变量?

时间:2019-07-16 05:04:26

标签: javascript php jquery ajax post

我正在用PHP创建一个登录页面,用户在其中输入用户名。如果用户名有效,则将用户重定向到另一个页面,在该页面上打印他们使用的用户名。如果用户名无效,页面会提示他们输入有效的用户名,然后页面会重新加载。

我的问题是将有效的“用户名”变量从登录页面“发布”到用户重定向到的页面。

我知道我可以在登录页面的表单标签中输入:

<form action='pageToPostTo.php' method='POST'>

</form>

但是,我的问题是,一旦用户点击“提交”,这个东西似乎总是重定向到pageToPostTo.php。结果,如果用户名无效,我不知道如何避免这种重定向。

相反,我使用jQuery的“ .ready”和“ .click”来执行JavaScript代码,以验证当用户单击“提交”时用户名是否有效。如果有效,那么将调用Ajax的“ POST”方法。如果无效,则登录页面会提示并重新加载。

function isValid(username) {
    return true;
}

$(document).ready(function () {

    $('input#submit').click(function (event) {

        event.preventDefault();

        if(isValid(username.value)) {
            postUser();
        }

        else {
            alert("Invalid Username");
            location.reload();
        }
    });
});

postUser()如下所示:

function postUser() {

    var username = username.value;

    $.ajax({
        url: 'pageToPostTo.php',
        type: 'POST',
        data: {getUsername: username}, // username = "danny"
        success: function(response) {
            alert(response);    // Outputs: "Your username is: danny"
            window.location.href = 'pageToPostTo.php'; // Outputs: "Your username is: Notice: Undefined index: getUsername..."
        }
    });
}
我的Ajax发布对象的“成功”函数中的

“警报(响应)”正确评估$ _POST ['getUsername']。这表明我的Ajax帖子运行良好。

这是我的问题所在:当我重定向到pageToPostTo.php时,$ _ POST ['getUsername']停止评估,而是返回“ Notice:Undefined index:getUsername”。

Ajax的“ post”方法似乎有效,但是重定向缺少Ajax“发布”的内容。

在执行Ajax“ post”方法之后,是否有一种方法可以重定向到“ pageToPostTo.php”,这样在重定向之后,我可以使用$ _POST ['getUsername']来检索Ajax发布的内容?

如果没有,为什么不这样做,我必须有哪些替代方法才能获得相同的功能?

以前,我是使用localStorage.setItem(“ usernameStorage”,username.value)和localStorage.getItem(...)在php文件之间传输变量的。这样做有什么弊端吗?

从我的loginPage.php中截取:

<form name="login">
    <p>Username: <input type="text" id="username" ></p>
    <input type="submit" id="submit">
</form>

pageToPostTo.php:

<?php
    $validUser = $_POST['getUsername'];
    echo "Your username is: " . $validUser;
?>

P.S。验证用户名是否有效的函数必须在JavaScript中。

2 个答案:

答案 0 :(得分:0)

在这种情况下,您只需要开始使用开发的解决方案即可。像变通一样,我建议您在文件之间传输数据时使用$_SESSION来存储数据。您的情况:用户登录后,程序验证,如果成功,则将其保存在

$_SESSION['user_id'] = $user_id

之后,您将重定向到文件:pageToPostTo.php:,首先检查会话中是否存在user_id,如果不存在->重定向到登录页面,如果存在,则将值分配给$ var并执行操作需要这样做。

您必须在同一页面上执行登录php,并且仅在验证成功的情况下进行重定向。这是我的回答的补充。

答案 1 :(得分:0)

您可以在jQuery中使用表单提交而不是单击按钮。
例子:
这是您的html表单:

<form action='pageToPostTo.php' id="action-form" method='POST'></form>

修改后的JQuery脚本:

$("#action-form").submit(function(){
  if(!isValid(username.value)) {
    alert("Invalid Username");
    return false;
  }
});

那样,如果用户名有效,它将自动在“ pageToPostTo.php”上重定向。无需点击ajax请求。