2014-05-22 105 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 });