Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: ajax не возвращает alert

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
hungel
Отправлено: 22 Октября, 2012 - 14:45:50
Post Id


Новичок


Покинул форум
Сообщений всего: 21
Дата рег-ции: Авг. 2012  


Помог: 0 раз(а)




Доброго времени суток.

Задача очень простая. Нужно сделать обновление рейтинга через ajax. На странице есть две кнопки, плюс и минус. Через Ajax GET запросом это передается php скрипту. Все отлично работает, рейтинг пишется в базу и обновляется на странице с которой голосовали, но если попробовать проголосовать еще раз должен вылететь алерт с надписью "Вы уже голосовали.". Алерт написан в php скрипте который пишет рейтинг в базу. При попытке голосовать второй раз просто ничего не происходит, рейтинг не увеличивается, но и алерт не выдается.

Вот java-script

CODE (htmlphp):
скопировать код в буфер обмена
  1. function createRequestObject() {
  2.   if (typeof XMLHttpRequest === 'undefined') {
  3.     XMLHttpRequest = function() {
  4.       try { return new ActiveXObject("Msxml2.XMLHTTP.6.0"); }
  5.         catch(e) {}
  6.       try { return new ActiveXObject("Msxml2.XMLHTTP.3.0"); }
  7.         catch(e) {}
  8.       try { return new ActiveXObject("Msxml2.XMLHTTP"); }
  9.         catch(e) {}
  10.       try { return new ActiveXObject("Microsoft.XMLHTTP"); }
  11.         catch(e) {}
  12.       throw new Error("This browser does not support XMLHttpRequest.");
  13.     };
  14.   }
  15.   return new XMLHttpRequest();
  16. }
  17.  
  18. function VoteUp(id){
  19. req = new XMLHttpRequest();
  20. req.onreadystatechange = function() {
  21.         if (req.readyState == 4) {
  22.                 if(req.status == 200) {
  23.                         document.getElementById('votestatus'+id).innerHTML = req.responseText;
  24.                 }
  25.         }
  26. }
  27. req.open('GET', 'localhost?page=vote&action=up&id='+id, true);
  28. req.send(null);
  29. document.getElementById('votestatus'+id).innerHTML = ' ';
  30. }


Ну и такая же функция VoteDown только с другим GET запросом.

C php думаю и так все понятно. Идет проверка голосовал или нет и если не голосовал то пишем в базу, а если голосовал выдаем алерт.

Java-script функция VoteUp(id) вызывается с параметром.

Суть вопроса собственно в том, почему не выдается алерт и еще меня смущает, почему при нажатии на ссылку голосовать страница перескакивает наверх, будто обновляется не только рейтинг а вся страница. Подгрузку страницы заметить не могу ибо локалхост. ))

Забыл дописать что при прямом обращении к php файлу все работает и alert выдается.

(Отредактировано автором: 22 Октября, 2012 - 15:07:50)

 
 Top
Zuldek
Отправлено: 22 Октября, 2012 - 15:21:25
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010  


Помог: 50 раз(а)




hungel пишет:
C php думаю и так все понятно. Идет проверка голосовал или нет и если не голосовал то пишем в базу, а если голосовал выдаем алерт.

Как раз и не понятно: в ответ на запрос о повышении рейтинга, вы должны:
1. Проверить голосовал-ли уже пользователь
2. Нет - пишем в базу, отдаем voted. Да - отдаем "voted".
3. Получая ответ с "voted" js-скрипт показывает alert при повторном голосе.
4. Если юзер уже голосовал, то при запросе страницы сервер отдает js с уже известным параметром voted, чтобы не дергать базу лишний раз.

(Отредактировано автором: 22 Октября, 2012 - 15:26:09)

 
 Top
hungel
Отправлено: 22 Октября, 2012 - 15:43:17
Post Id


Новичок


Покинул форум
Сообщений всего: 21
Дата рег-ции: Авг. 2012  


Помог: 0 раз(а)




В java-script я не силен. Как я понял тот алерт который у меня в самом php работать и не будет, нужно чтобы алерт возвращала функция VoteUp или VoteDown.

Я вызываю VoteUp() так
CODE (htmlphp):
скопировать код в буфер обмена
  1. <a href=''onclick='VoteUp(".$id'].");"><img src='картинка'></a>


Сам php скрипт который делает проверку и пишет в базу

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. //получаем переменные
  3. $id = $_GET['id'];
  4. $action = $_GET['action'];
  5. $user_id=user_id; //Я id из БД получаю, но опустил.
  6.  
  7. //dbcount функция двига которая считает количество чего либо в базе с условиями WHERE. 
  8.  
  9. //Голосуем плюсом, при условии что пользователь еще не голосовал, если голосовал, выдаем alert
  10. if ($action == 'up') {
  11.         $user_rate = dbcount("(vote_value)", VOTE, "vote_user_id='".$'user_id'."' AND vote_target_id='".$id."'");
  12.         if ($user_rate == 0) {
  13.         $result = dbquery("INSERT INTO ".VOTE." SET vote_value='1'"', vote_target_id='{$id}', vote_user_id='user_id'', vote_datestamp='".time()."'");
  14.         } else {
  15.                 echo "<script>alert('Вы уже голосовали.')</script>";
  16.         }


как то так.

(Отредактировано автором: 22 Октября, 2012 - 15:44:46)

 
 Top
Zuldek
Отправлено: 22 Октября, 2012 - 16:00:34
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010  


Помог: 50 раз(а)




В текущем варианте строка:
"<script>alert('Вы уже голосовали.')</script>";
придет на эту же страницу, в ответ на запрос с результатом не успешного голосования, запускаете функцию показа ошибки повышения рейтинга.
Например, в случае с использованием jquery:
CODE (htmlphp):
скопировать код в буфер обмена
  1. function http_zapros(el, nid, cid)
  2. {
  3.         var params = "page=" + el + "&id=" + nid + "&cid=" + cid + "&ajax=sdfefefwerr234qwqe3svdsfget32543f";
  4.         $.post('<?php echo $_SERVER['QUERY_STRING']; ?>', params, function(data){
  5.                 if(data=="0")
  6.                 {
  7.                         alert("Новостей больше нет!");
  8.                         $("#link_more_div").hide();
  9.                 }
  10.                 else
  11.                 {
  12.                         var news = $(data).hide();
  13.                         news.appendTo($("#show")).slideDown("normal");
  14.                 }
  15.         });
  16. }
  17. </script>

Откуда брать ответ сервера на ajax-запрос - читайте в описании технологии.

(Отредактировано автором: 22 Октября, 2012 - 16:04:09)

 
 Top
hungel
Отправлено: 22 Октября, 2012 - 16:56:55
Post Id


Новичок


Покинул форум
Сообщений всего: 21
Дата рег-ции: Авг. 2012  


Помог: 0 раз(а)




А можно как то обойтись без jquery?
Я специально пытался обойтись без него дабы лишний раз не перегружать страницы фреймворками.
 
 Top
Zuldek
Отправлено: 23 Октября, 2012 - 14:05:41
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010  


Помог: 50 раз(а)




обходитесь, можно.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« JavaScript & VBScript »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB