私は漫画のウェブサイトHitting Trees with Sticksを持っています。これにより、ユーザーは次を押すか、単に矢印キーを押すだけで、次、前、またはランダムなコミック ID を取得できます。
画像はデータベースに保存されるため、クライアント側でこれらの画像を循環させる唯一の方法は、それらを JavaScript 配列に保存し、php $imgid を javascript 変数に imgIndex として保存することでした。次に、キーボードのキーを押したときに、クライアント側でそのインデックスを変更できます。
ユーザーがキーを押すと、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
何かご意見は?
ありがとう!