【发布时间】:2020-01-23 09:26:19
【问题描述】:
如何在 AJAX 调用后 JSON 值后更新同一页面上的 SESSION 值而不刷新页面。
我被困在这里了。非常感谢任何解决问题的帮助。我根据单击的操作按钮在 PHP 中运行特定类。即当用户单击添加按钮时,它会启动 AJAX 调用并发送“添加”ID,否则如果他/她单击更新按钮,它会发送“更新 ID”。我想在不更新页面的情况下执行此操作。
我已经获得了数据,但唯一的问题是它只有在我刷新页面时才会更新
AJAX 发送数据后,如何在 PHP 中更新 SESSION。我是新手,请放轻松:)谢谢你
索引.php
<?php
session_start();
echo "SESSION: ".$_SESSION['pageType'];
?>
<!DOCTYPE>
<html lang="en-OM">
<div >AJAX: </div><div id="msg" style="display:inline"></div></div>
<a id="btnAdd" value="add" class="btnType" href="#" role="button">ADD</a><br>
<a id="btnUpdate" value="update" class="btnType" href="#" role="button">UPDATE</a><br>
<a id="btnDelete" value="delete" class="btnType" href="#" role="button">DELETE</a>
</html>
jQuery
<script>
$(document).ready(function () {
$('.btnType').click(function (ev) {
ev.preventDefault();
ev.stopImmediatePropagation();
let pageID;
pageID = $(this).attr('value');
$.ajax({
type: 'POST',
url: 'postData.php',
dataType: 'json',
data: {
pageType: pageID
},
beforeSend: function (data) {
},
success: function (data) {
$('#msg').text(data);
console.log(data);
return data;
},
error: function (jqXHR, textStatus, errorThrown) {
console.log('<p>status code: ' + jqXHR.status +
'</p><p>errorThrown: ' + errorThrown +
'</p><p>jqXHR.responseText:</p><div>' + jqXHR.responseText +
'</div>');
console.log('jqXHR:');
console.log(jqXHR);
console.log('textStatus:');
console.log(textStatus);
console.log('errorThrown:');
console.log(errorThrown);
}
});
});
});
</script>
postData.php
session_start();
if (!empty($_POST['pageType'])) {
echo json_encode($_POST['pageType']);
$_SESSION['pageType']=$_POST['pageType'];
exit;
}
【问题讨论】:
-
这里到底指的是什么,什么是刷新页面后才更新? “一旦 AJAX 发送数据,我如何在 PHP 中更新 SESSION” - 通过将新值分配给会话变量,就像您对
$_SESSION['pageType']=$_POST['pageType']所做的那样。我认为您以某种方式混淆了服务器上会话数据的实际状态,以及客户端上显示的内容......? -
将
echo "SESSION: ".$_SESSION['pageType'];移动到你的“msg”div 中。这样,当您运行 AJAX 调用时,它将被覆盖(因为$('#msg').text(data);)。如果您打算只返回一段文本以在页面中显示,也不要使用 json_encode - 这不是必需的。 -
@ADyson 我按照你的要求做了,但还是不行。因为一旦您在服务器端分配了值,就需要刷新它才能更新。删除 json_encode 会给我错误。
-
“一旦你在服务器端分配了值,它就需要刷新才能更新”......在这种情况下,您的 AJAX 调用可能无法正常工作。你需要做一些调试。
-
P.S.我应该说,当您删除
json_encode时,您还应该从 AJAX 中删除dataType: 'json'。您没有使用或不需要任何 JSON 来实现此功能。