我有一个页面上有标签。 每个选项卡上都有一些表单。 在窗体上,用户可以设置筛选器。 例如"显示我 (10,25,100( 结果">
当用户输入值时,我会触发对设置会话变量的 php 脚本的 ajax 调用
$_SESSION['filter'] = $_POST['filter'];
ajax 调用的成功会触发选项卡单击以访问用户所在的窗体:
$.ajax({
type:"POST",
data:"filter="+filter,
url:"actions/Tickets/filters.php",
success:function(result){
$('#someTab').trigger('click');
}
});
我遇到的问题是如果我
print_r($_SESSION);
在表单所在的页面上,我没有看到 $_SESSION['filter'] 值的任何更改。
我认为正在发生的事情是 ajax 没有等待脚本完成,因此永远不会设置 SESSION var。 异步不是一种选择。 我怎样才能做到这一点?
如何使用 ajax 脚本调用 php 文件来设置 SESSION 变量,然后在导航选项卡上触发单击事件。
正如您在评论中所述,您使用以下方法设置会话:
$_SESSION['filter'] = $_POST['filter'];
比,我认为问题是,当您在 php uisng ajax 调用中设置会话时,您只能通过使用另一个 ajax 调用或在页面刷新后获取更新的会话。因此,再做一个 ajax 调用,看看会发生什么。
你不能在javascript中分配会话,因为javascript发生在客户端,会话存储在服务器端。所以,不可能像js那样使用php变量。
<?php
$_SESSION['filter'] = "foo";
?>
然后,您可以在 js
中使用此会话变量。但你不能反之亦然。您无法将会话从 js
分配给 php
。
您可以使用 jquery 将值设置为 js
到 html
,但此方案是不可能的。
编辑:-
因此,在 filter.php
中设置会话变量。
$_SESSION['filter'] = "foo";
之后,当结果被重新加载时,重新加载页面。因为必须重新加载页面才能设置会话。我不确定它,但可能有效。
$.ajax({
type:"POST",
data:"filter="+filter,
url:"actions/Tickets/filters.php",
success:function(result){
$('#someTab').trigger('click');
location.reload(); // reload the page
}
});
<</div>
div class="one_answers">当然你不能这样分配,因为js是客户端脚本,php是服务器端,你可以将php变量分配给js变量,反之亦然
你需要使用它:
$_SESSION['filter'] = $_POST["filter"];
这篇文章可能会帮助你:通过 ajax 设置 php 会话