Intereting Posts

jQuery AJAX просит не обновлять переменную php

У меня есть сайт комиксов « Hitting Trees with Sticks» , который позволяет пользователю получить следующий, предыдущий или случайный комедийный идентификатор, нажав далее или просто нажав клавиши со стрелками.

Поскольку изображения хранятся в базе данных, единственный способ для меня использовать эти изображения на стороне клиента – хранить их в массиве javascript и хранить php $ imgid в переменной javascript как imgIndex. Затем я мог бы изменить этот индекс на стороне клиента, когда они нажимают клавиши клавиатуры.

Когда пользователь нажимает клавишу, я использую pushstate для изменения imgid в URL-адресе, но на самом деле это не обновление серверной стороны $ imgid. Мне нужно обновить серверную часть $ imgid, потому что я связываю функцию симпликации с каждым конкретным идентификатором … но в настоящее время общее количество, связанное с идентификатором img, не будет обновляться / обновляться, когда я нажимаю клавишу, чтобы получить новую образ.

Мое решение состояло в том, чтобы не только использовать 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 

Есть предположения?

Благодаря!

Я думаю, что проблема с вашим кодом заключается в том, что вы используете свой код Ajax после того, как страница уже загружена, пытаясь изменить переменные $_get для начальной загрузки страницы. AFAIK, вам нужно обновить всю страницу для кнопки «Facebook как», чтобы изменить ее идентификатор. Другой вариант – использовать 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 } ); 

EDIT # 2

Если вы хотите динамически изменить URL-адрес кнопки Like, взгляните на этот ответ.

Вот сценарий рабочего примера: http://jsfiddle.net/TkFma/4/