无法将PHP会话变量返回给JQuery

时间:2018-07-27 15:50:48

标签: php jquery session

我知道在从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');
 });
});

我在做什么错了?

1 个答案:

答案 0 :(得分:2)

您在这里只有一个小问题,它是根据您提供的代码进行的简单修复。您必须在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攻击向量。