我有一个漫画网站,Hitting Trees with Sticks,它允许用户通过按下一个或简单地按箭头键来获取下一个、上一个或随机漫画 ID。
由于图像存储在数据库中,我在客户端循环浏览这些图像的唯一方法是将它们存储在 javascript 数组中,并将 php $imgid 作为 imgIndex 存储在 javascript 变量中。然后,当他们按下键盘键时,我可以在客户端更改该索引。
当用户按下一个键时,我使用 pushstate 来更改 URL 中的 imgid,但这实际上并没有更新服务器端的 $imgid。我需要更新服务器端 $imgid 因为我将一个喜欢功能与每个特定 ID 相关联......但是目前,当我按下一个键来获取一个新的 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
有什么想法吗?
谢谢!