我有一个页面上有标签。每个标签上都有几个表格。在表单上,用户可以设置过滤器。例如“Show me(10,25,100)results”
当用户输入一个值时,我会激活对设置会话变量的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永远不会被设置。 asynch不是一个选择。我怎么能实现这个目标呢?
如何使用ajax脚本调用php文件来设置SESSION变量,然后在导航标签上触发click事件。
答案 0 :(得分:0)
正如您在评论中所说,您使用以下方式设置会话:
$_SESSION['filter'] = $_POST['filter'];
然而,我认为问题是,当你在php uisng中设置一个ajax调用会话时,你只能通过使用另一个ajax调用或页面刷新后获得更新的会话。所以再做一个ajax调用,看看会发生什么。
答案 1 :(得分:0)
你不能在javascript中分配会话,因为javascript发生在客户端,而会话存储在服务器端。 所以,你不可能在像js这样的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
}
});
答案 2 :(得分:0)
当然你不能这样分配因为js是客户端脚本&amp; php是服务器端,你可以将php变量分配给js变量,但不能反之亦然
您需要使用此功能:
$_SESSION['filter'] = $_POST["filter"];
这篇文章可以帮到你: Set php session via ajax