javascript - AJAX 将数据发布到 PHP 文件并重定向到同一文件以回显发布数据

标签 javascript php jquery ajax

我有一个 php 文件,里面有一堆 <a></a>包含用户名的元素。单击这些链接之一后,该链接的 data属性通过 AJAX 存储并发布到第二个 php 文件。但是,一旦我重定向到该文件,我发布的值就不会显示,而是收到错误:Undefined index userid

这是我的代码:

索引.php

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Post Test</title>
</head>
<body>

<a href="#" class="user-name" data-user-id="1" data-render-view="users.php">User 1</a>
<a href="#" class="user-name" data-user-id="2" data-render-view="users.php">User 2</a>
<a href="#" class="user-name" data-user-id="3" data-render-view="users.php">User 3</a>
<a href="#" class="user-name" data-user-id="4" data-render-view="users.php">User 4</a>
<a href="#" class="user-name" data-user-id="5" data-render-view="users.php">User 5</a>

<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script type="text/javascript">
$('.user-staff').on('click',function(){
  var userid = $(this).data('user-id');
  var renderView = $(this).data('render-view');

  $.ajax({
    url: "users.php",
    type: "POST",
    data: {userid:userid},
    success: function(data, textStatus, jqXHR){
      window.location = renderView;
    },
    error: function (jqXHR, textStatus, errorThrown){
      alert('Error!')
    }
  });
});

</script>
</body>
</html>

用户.php

<?php

$userIdExchanged = $_POST['userid'];

echo '<h1>user profile page</h1>';
echo $userIdExchanged; //Nothing is outputted here.

?>

最佳答案

是的,这确实发生了,基本上,第一步,您发送了一个ajax请求,发送了该值user-id

然后你重定向。这意味着您有两个单独的请求。

第一次请求成功。重定向后(这是第二个),您的值不再存在,因为第一个请求上的数据没有保留。

我不知道为什么你必须发出ajax请求。不妨正常提交表单。

但是如果您确实想继续学习本类(class),则在第一个请求(ajax 请求)时,您可以将其保存在 session 中。

这样您发送的值将被保存。然后重定向后,您仍然可以访问:

<script type="text/javascript">
// maybe you mean `.user-name` not `.user-staff`
$('.user-name').on('click',function(){

    var userid = $(this).data('user-id');
    var renderView = $(this).data('render-view');

    $.ajax({
        url: "users.php",
        type: "POST",
        data: { userid: userid, setid: true }, // add a flag
        success: function(data, textStatus, jqXHR){
            window.location = renderView;
        },
        error: function (jqXHR, textStatus, errorThrown){
            alert('Error!')
        }
    });
});
</script>

然后在 PHP 中:

<?php

session_start();
// if the set flag is used, set it
if(isset($_POST['setid'])) {
    $_SESSION['userid'] = $_POST['userid'];
}

// if no flag is set, then this will just continue and echo the value currently set
$userIdExchanged = $_SESSION['userid'];

echo '<h1>user profile page</h1>';
echo $userIdExchanged;

?>

关于javascript - AJAX 将数据发布到 PHP 文件并重定向到同一文件以回显发布数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26835093/

相关文章:

javascript - 如何使用 jquery 隐藏 google.visualization.table 中的列

javascript - 将每次 slideToggle() 调用的边距更改 x%

JavaScript、异步/等待和 promise

javascript - 如何在innerHTML中添加jquery fadein

javascript - 粘性js脚本问题

php - 允许用户上传个人资料照片

javascript - 如何在回调中访问正确的“this”?

php - Yii2 db mysql 连接抛出 ssh 端口 33060

php - swig 和 libcurl 在一起

javascript - 使用 AngularJS 将除所选单选按钮之外的值设置为 False