2013-02-18 134 views
0

我有一個漫畫網站,Hitting Trees with Sticks,允許用戶按下一個或只是按箭頭鍵獲得下一個,上一個,或隨機漫畫ID。jquery AJAX請求不更新php變量

由於圖像存儲在數據庫中,我在客戶端循環瀏覽這些圖像的唯一方法是將它們存儲在javascript數組中,並將php $ imgid作爲imgIndex存儲在javascript變量中。然後當他們按下鍵盤按鍵時,我可以在客戶端更改該索引。

當用戶按下某個鍵時,我使用pushstate來更改URL中的imgid,但實際上並未更新服務器端$ imgid。我需要更新服務器端$ imgid,因爲我將喜歡的功能與每個特定的ID相關聯......但是目前,當我按某個鍵獲取新的時候,與img ID關聯的總喜歡不會刷新/更新圖片。

我的解決方案是不僅使用PushState更新URL,但當按下某個鍵時,我使用$ .post,並將更新的imgIndex發送到php腳本。

下面是摘錄:

KeyInput.php:這是客戶端JavaScript:

<script type="text/javascript"> 
    var imgArray = [<?php echo implode(',', getImages($site)) ?>]; 
    var imgIndex = <?php echo $imgid ?>; 

$(document).ready(function() {  
    var img = document.getElementById("showimg"); 
    img.src = imgArray[<?php echo $imgid ?>]; 

    $(document).keydown(function (e) { 
     var key = e.which; 
     var rightarrow = 39; 
     var leftarrow = 37; 
     var random = 82; 

     if (key == rightarrow) 
     { 
      imgIndex++; 
      if (imgIndex > imgArray.length-1) 
      { 
       imgIndex = 0; 
      } 
      img.src = imgArray[imgIndex]; 
      window.history.pushState(null, null, '.?action=viewimage&site=comics&id=' + imgIndex); 

      $.post('./templates/viewimage.php', { _newImgId : imgIndex }, 
       function(data) { 
        //alert(data); 
       } 
      ); 

     } 

viewimage.php這是最初得到$ imgid文件,那麼它會調用keyInput.php腳本來接受鍵值輸入...,這會改變javascript imgid。出於測試目的,我已經嘗試使用$ .post和$ .get AJAX發送更新的imgid,如下所示,即$newID = $_POST['_newImgId];。當我回顯出$ newID時,它說它沒有被定義。

<?php 
/* 
Controls display of comic on the viewComic template 
*/ 
include 'include/header.php'; 

global $site, $imgid; 

$cat = (isset($_GET['cat']) ? ($_GET['cat']) : null); 
$site = (isset($_GET['site']) ? ($_GET['site']) : null); 
$title = (isset($_GET['title']) ? ($_GET['title']) : null); 
$imgid = $_GET['id']; 

include './scripts/keyinput.php'; 

$newID = $_POST['_newImgId]; 
echo $newID; //THIS SHOULD ECHO THE UPDATED ID, but it says it is not defined 

有什麼想法?

謝謝!

+0

我想你提到它,但你知道在HTTP請求方法混合在你的榜樣,對不對?我的意思是,JS代碼使用「_postID」調用POST,而您的PHP示例使用$ _GET [「_ getID」]。 – 2013-02-18 18:41:19

+0

你不應該使用'$ _post ['_ postID']'因爲你的JavaScript使用後? – 2013-02-18 18:41:35

+0

@WebDeskIL是的,這是一個錯字 – Growler 2013-02-18 18:42:44

回答

1

我認爲你的代碼存在的問題是,當頁面已經加載後,你正在使用你的Ajax代碼,同時試圖改變$_get變量以適應初始頁面加載。 AFAIK,你需要更新整個頁面的「臉譜」按鈕來改變它的ID。另一種選擇是使用Iframe。從我所看到的,按鈕的data-href屬性始終導致http://hittingtreeswithsticks.com/ - 只能通過使用不同屬性重新加載頁面來更改該屬性。

如果你不介意加載每個圖片的頁面,這樣可以制定出你:

<!-- This is the Like button code --> 
<div [...] data-href="http://www.hittingtreeswithsticks.com/<?php echo $_get['id']; ?>"></div> 

和本網頁的網址是:http://www.hittingtreeswithsticks.com/?id=PAGE_ID

編輯

使用AJAX,您需要從後端調用客戶端的數據,而無需重新加載整個頁面。這些數據可以用來改變客戶端的代碼。在代碼中,數據被髮回給你,但你不使用它在所有,這就是爲什麼它不工作:

$.get('./templates/viewimage.php', { _newImgId : imgIndex }, 
    function(data) { 
     // This is where you should make use of the data received 
    } 
); 

編輯#2

如果要動態更改Like按鈕的網址,看看this的答案。

這裏是工作示例的小提琴: http://jsfiddle.net/TkFma/4/

+0

我認爲AJAX的重點是向服務器發送請求以更新加載頁面的某個部分 - 在這種情況下,某些部分將是服務器端$ imgid值。 – Growler 2013-02-18 19:30:03

+0

所以你說刷新服務器端$ imgid的唯一方法是刷新頁面?這是像Facebook評論/喜歡這樣的東西的唯一方式將更新與他們相關的ID? – Growler 2013-02-18 19:39:36

+0

@Growler你也可以使用Iframe,在其中有「Like」按鈕,從而避免刷新整個頁面。查看我的更新 – 2013-02-18 19:41:02