我有一個漫畫網站,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
有什麼想法?
謝謝!
我想你提到它,但你知道在HTTP請求方法混合在你的榜樣,對不對?我的意思是,JS代碼使用「_postID」調用POST,而您的PHP示例使用$ _GET [「_ getID」]。 – 2013-02-18 18:41:19
你不應該使用'$ _post ['_ postID']'因爲你的JavaScript使用後? – 2013-02-18 18:41:35
@WebDeskIL是的,這是一個錯字 – Growler 2013-02-18 18:42:44