【问题标题】:Session variable not updating after AJAX callAJAX 调用后会话变量不更新
【发布时间】:2014-07-11 00:13:55
【问题描述】:

我在这里有点难过。我有 2 个 php 页面。一个基本上显示模板,单击时,AJAX 调用调用外部页面并显示所有必要的信息。我的问题是我的会话变量没有更新。我正在使用一些分页,并且数字没有更新。我的模板页面上的一些代码:

重新分页

    session_start();
    $pagination .= $_SESSION['position'] == "" ? '' : 'Items '.$_SESSION['position'].'-'.$_SESSION['item_per_page'].' of '.$get_total_rows ;
    if($pages > 1)
        {
        $pagination .= '<ul class="paginate nav nav-pills">';
        for($i = 1; $i<=$pages; $i++)
        {
            $pagination .= '<li><a href="#" class="paginate_click" id="'.$i.'-page">'.$i.'</a></li>';
        }
        $pagination .= '</ul>';
    }
<?php echo $pagination; ?>

<div id="results">
    <!-- Results from query will go in here -->
</div>

j$(".paginate_click").click(function (e) {
    j$("#results").prepend('<div class="loading-indication"><img src="/assets/loader.gif" /></div>');
    var clicked_id = j$(this).attr("id").split("-"); //ID of clicked element, split() to get page number.
    var page_num = parseInt(clicked_id[0]); //clicked_id[0] holds the page number we need 
    j$('.paginate_click').removeClass('active'); //remove any active class
    //post page number and load returned data into result element
    //notice (page_num-1), subtract 1 to get actual starting point
    j$("#results").load("development_fetch.php", {'page': (page_num-1)}, function(){
        });
    j$(this).addClass('active'); //add active class to currently clicked element
    return false; //prevent going to herf link
}); 

在 development_fetch.php 中:

session_start();
$page_number = filter_var($_POST["page"], FILTER_SANITIZE_NUMBER_INT, FILTER_FLAG_STRIP_HIGH);
$position = ($page_number * $item_per_page);
$_SESSION['position'] = $position;
$_SESSION['item_per_page'] = $item_per_page;
//Grab code to display inside template blah.

如果你点击分页中的第1页,它应该会导致:

项目 0 - 100 共 1000 个

如果我点击第 2 页,应该是:

100 - 200 个项目,共 1000 个

但它只是停留在:

项目 0 - 100 共 1000 个

0 是$_SESSION['position'] 100 是$_SESSION['item_per_page']

我不明白为什么它不更新。请帮助堆垛机!

【问题讨论】:

  • session_start(); 请在每个页面上。
  • 忘了哟,session_start() 在每一页上
  • 你能从 ajax 返回一个 print_r($_POST); 来看看 ajax 的实际情况吗?
  • 在 development_fetch.php 中是我放置代码的地方。我得到了这个结果 Array ( [page] => 0 )
  • 无论你点击哪个分页结果Array ( [page] 是0?

标签: php jquery ajax session pagination


【解决方案1】:

我已经解决了我的问题。我遇到的问题是,当我执行 ajax 时,会话变量不会实时更新。我所做的是,我只是将 ajax 异步设置为 false,因为当您执行异步时,缓存的值不是更新的值,因为它处于异步模式。如果您使用的是 jquery,请执行以下操作:

$.ajax({ 类型:'POST', 网址:'网址', 数据:'数据', 成功:函数(){}, 异步:假 });

【讨论】:

    【解决方案2】:

    session_start(); 放在加载了AJAX 的页面的开头。

    【讨论】:

    • 两个页面都已经加了,sn-ps忘记加了,不好意思!
    • $item_per_page 在 ajax 页面中未分配。像传递页码一样传递该值,或者如果您希望它保持不变,则将其分配给您喜欢的值。
    • 抱歉回复晚了。 $item_per_page 是一个全局变量,位于包含文件中:)
    • 您是否在 AJAX 页面上包含了该文件(包含 $item_per_page 全局变量)?
    • 是的,我做到了!我仍然为它难倒!
    【解决方案3】:

    我想我找到了,在你的development_fetch.php

    $position = ($page_number * $item_per_page);
    

    好的,$page_number 有一个值,但是 $item_per_page 呢?我猜它是零,乘法的结果当然是零。然后你在$_SESSION上设置这些零

    解决方案:

    设置你的$item_per_page

    session_start();
    $item_per_page = 20;
    // ...rest of code
    

    【讨论】:

    • 嘿伙计,我已将 $item_per_page 添加为包含文件的一部分,但我仍然遇到同样的问题!
    • @AkiraDawson 如果您在development_fetch.php 中设置它是否有效?
    • development_fetch.php 具有相同的包含文件,其中包含 $item_per_page 变量
    • @AkiraDawson 请回答我之前的评论 :)
    【解决方案4】:

    我也遇到了这个问题,但我的表现很奇怪。似乎会话速度不够快,无法赶上 ajax。这个问题已经解决了吗?

    【讨论】:

    • 很遗憾没有解决。我重写了我的代码以使我的工作:(我不得不做顽皮的顽皮。我确实有计划回到它并让它变得更好
    猜你喜欢
    • 1970-01-01
    • 2019-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-27
    • 1970-01-01
    • 2019-10-21
    • 2018-06-23
    相关资源
    最近更新 更多