Я создаю фиктивный сайт Flickr, где вы можете оценивать фотографии, нажимая на 1-10 звезд. Когда страница загружается, она создает объект для фотографии и устанавливает его значения на основе записи в базе данных, соответствующей его идентификатору. Когда вы наводите курсор на звезды, они загораются (от 1) до звездочки с цифрой, на которой находится ваш курсор, обозначая ваш рейтинг. Когда вы нажимаете на звезду, он отправляет рейтинг (через AJAX) и обновляет базу данных, а затем устанавливает звезды, чтобы отразить новый рейтинг.
Проблема заключается в том, что если вы наведете курсор на звезды, а затем уберете их мышью (не нажимая ни на одну из них), то загоревшиеся звезды отражают рейтинг фотографии при первоначальной загрузке страницы, а не текущий рейтинг (на основе рейтинги, зарегистрированные с помощью AJAX, когда пользователь нажимает на звездочку).
База данных обновляется, звезды отражают правильный рейтинг сразу после AJAX-вызова (поскольку я вызываю ту же функцию в конце AJAX-вызова, что и с onmouseout, stars_current_rating(rating)). Единственное отличие заключается в том, что в конце вызова AJAX я передаю xmlhttp.responseText в качестве параметра. И в onmouseout я передаю (то, что я пытаюсь получить) самый последний рейтинг в базе данных для этой фотографии.
onmouseout="stars_current_rating(<?php echo Photograph::find_by_id($_GET['id'])->rating?>);"
Моя логика, стоящая за этим вызовом, заключается в предположении, что я получаю новый рейтинг, который был сохранен в базе данных, найдя его и передав новый рейтинг в stars_current_rating(...). Единственная проблема заключается в том, что onmouseout передает исходный параметр рейтинга, который был извлечен из БД при загрузке страницы, а не новое значение в БД (что и делает функция sql find_by_id())... Вот код, который обрабатывает отображение звезд.
<div id="rating" class="rating">
<?php
for($i=1; $i<11; $i++){
?>
<a id="rating_star<?php echo $i ?>" href="#" onmouseover="decide_rating(<?php echo $i ?>);"
onmouseout="stars_current_rating(<?php echo Photograph::find_by_id($_GET['id'])->rating?>);"
onmousedown="set_rating(<?php echo $photo->id.", ".$i ?>);">
<img id="star<?php echo $i ?>" class="rating_star" src=
<?php
// Sets up stars with initial rating in db when page is first loaded
if($photo->rating >= $i){
echo "images/assets/rating_star.png";
} else {
echo "images/assets/rating_star_off.png";
}
?>
/>
</a>
<?php } ?>
</div>
Любая помощь или понимание будут оценены для получения более подробной информации по вопросу, нажмите на ссылку ниже для исходного вопроса.