jquery AJAX请求不更新php变量

我有一个漫画网站, 用棍子打树 ,允许用户通过按下一个或只需按箭头键获得下一个,上一个或随机漫画ID。

由于图像存储在数据库中,因此我在客户端循环浏览这些图像的唯一方法是将它们存储在javascript数组中,并将php $ imgid存储在javascript变量中作为imgIndex。 然后,当他们按下键盘键时,我可以在客户端更改该索引。

当用户按下某个键时,我使用pushstate来改变URL中的imgid,但实际上并没有更新服务器端$ imgid。 我需要更新服务器端$ imgid,因为我正在将喜欢的function与每个特定的ID相关联…但是目前,当我按一个键来获取新的时,与img ID相关联的总喜欢不会刷新/更新图片。

我的解决方案是不仅使用PushState来更新URL,但是当按下某个键时,我使用$ .post,并将更新的imgIndex发送到php脚本。

以下是片段:

KeyInput.php :这是客户端javascript:

 var imgArray = []; var imgIndex = ; $(document).ready(function() { var img = document.getElementById("showimg"); img.src = imgArray[]; $(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 

有什么想法吗?

谢谢!

我认为代码的问题在于,在页面加载后您正在使用Ajax代码,同时尝试更改初始页面加载的$_get变量。 AFAIK,您需要更新“Facebook like”按钮的整个页面以更改其ID。 另一种选择是使用Iframe。 从我所看到的,按钮的data-href属性总是导致http://hittingtreeswithsticks.com/ – 并且只能通过使用不同的属性重新加载页面来更改。

如果您不介意为每张图片加载页面,这可以为您解决:

  

此页面的地址为: http://www.hittingtreeswithsticks.com/?id=PAGE_IDhttp://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按钮的URL,请查看此答案。

这是一个工作示例的小提琴: http : //jsfiddle.net/TkFma/4/