php - 无法将 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');
});
});
我究竟做错了什么?
解决方案
您在这里只有一个小问题,它是基于您提供的代码的简单修复。您必须在 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 攻击向量。
推荐阅读
- postgresql - postgres 的 sql 类型(切片)无效
- yosys - 了解逻辑块 LC_5 位
- reactjs - 鼠标悬停时 GeoJSON 图层颜色变化
- python - 使用单元格值重命名 XLS 文件 - 删除空格和特殊字符
- asp.net-core - 在 WebAssembly 中触发登录操作时发送附加查询字符串
- java - 用 Java 表示的将 12 小时上午/下午 meridiem 格式小时转换为 24 小时格式的算法是什么?
- excel - 运行时错误“1004”:尝试将具有匹配条件的行从一个表复制到另一个表时,Range 类的 PasteSpecial 方法失败
- google-bigquery - 正则表达式包含在 bigquery 示例中
- unity3d - 无法从“UnityEngine.Vector3”转换为“UnityEngine.Quaternion”
- javascript - 无需等待即可解决承诺