首页 > 解决方案 > 无法将 PHP 会话变量返回给 JQuery

问题描述

我知道有很多关于从 JQuery 设置 PHP 会话然后将其返回到 JQuery 的问题。我已经查看了所有这些,但仍然无法弄清楚为什么我的代码不起作用。我正在尝试使用模式在后端 PHP 页面上设置 PHP 会话变量,然后使用 jquery 在另一个模式中显示它,但没有返回任何内容。

这是我的发送模式:

<div id="sendingModal" class="modal" tabindex="-1" role="dialog">
 <div class="modal-dialog modal-md" role="document">
  <div class="modal-content">
   <div class="modal-body">
    <button id="testSession" type="button" class="btn btn-secondary">Session Test</button>
   </div>
  </div>
</div>

这是我的后端 php:

<?php
  session_start();
  $_SESSION['testInput'] = $_POST['inputData'];
?>

这是我的接收模式:

<div id="receivingModal" class="modal" tabindex="-1" role="dialog">
 <div class="modal-dialog modal-md" role="document">
  <div class="modal-content">
   <div class="modal-body">
    <div id="testDiv"></div>
   </div>
  </div>
</div>

这是我的jQuery:

$(document).ready(function() {
 $('#testSession').on('click',function(e){
   var testData = 'testing 123';
   $.post("backendSession.php", {"inputData": testData});
   $('#testSession').html(<?=$_SESSION['testInput']?>);
   $('#testModal').modal('show');
 });
});

我究竟做错了什么?

标签: phpjquerysession

解决方案


您在这里只有一个小问题,它是基于您提供的代码的简单修复。您必须在 ajax 调用期间返回新数据,否则您将无法使用它(直到刷新一个全新的页面)。

首先,添加到您的backendSession.php

<?php
    session_start();
    $_SESSION['testInput'] = $_POST['inputData'];
    echo htmlspecialchars( $_SESSION['testInput'] );// new bit
?>

然后调整你的.post用法如下:

$(document).ready(function() {
    $('#testSession').on('click',function(e){
       var testData = 'testing 123';
       $.post("backendSession.php",
              {"inputData": testData},
              function( rawdata ) {                  // add return handler callback
                  $('#testDiv').html( rawdata );     // use the return data
                  $('#testModal').modal('show');     // show the modal
              }
       );
    });
});

现在这是做出你想做的事情的基本改变。但是,如果您计划需要的不仅仅是输入的回显,那么您将来可能希望处理 JSON 返回数据。不过,这方面的一个例子将超出问题范围;)

另一方面:您可能需要清理该帖子输入。我知道你提供的只是一个最小的例子,但我只是想提一下。正如简单地将原始用户输入回显到页面中一样,可以打开一些 XSS 攻击向量。


推荐阅读