2014-05-22 67 views
2

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

Redndering分页

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是 100是$_SESSION['item_per_page']

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

+3

'session_start();'请在**每**页面上。 – Sharky

+0

忘记哟提及,session_start()在每一页 –

+0

你可以从ajax返回一个'print_r($ _ POST);'来查看实际上到达ajax的内容吗? – Sharky

回答

0

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

+0

它已经被添加到两个页面中,忘记在我的代码片段中添加它,对不起! –

+0

$ item_per_page在ajax页面中未赋值,如果您传递页面编号,则将该值传递给您,或者将其赋值为您希望的值(如果您希望它不变) – AeJey

+0

Sory for late reply。$ item_per_page是一个全局变量,它是位于一个包括文件:) –

0

我想我找到它,在你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 
+0

嘿,队友,我已经添加$ item_per_page作为包含文件的一部分,我仍然有同样的问题! –

+0

@AkiraDawson如果你在'development_fetch.php'中设置它是否有效? – Sharky

+0

该development_fetch.php具有相同的包含文件,其中包括$ item_per_page变量 –

0

我也有这个问题,但我是怪怪的。似乎会议不够快,赶上ajax ..这个问题已经解决了吗?

+0

它不是不幸解决。我重写了我的代码,以使我的工作:(我必须做调皮淘气。我有计划回到它并使其更好 –

2

我已经解决了我的问题。我遇到的问题是,当我在做Ajax时,会话变量没有实时更新。我所做的是,我只是把异步的ajax变成了false,因为当你正在做异步时,由于它处于异步模式,被缓存的值不是更新后的值。如果你正在使用jQuery,只要这样做:

$。ajax({ type:'POST', url:'url', data:'the datas', success:function(){}, async:false });