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 :: XMLHttpRequest страдания и боль!
Покинул форум
Сообщений всего: 21
Дата рег-ции: Июнь 2014
Помог: 0 раз(а)
Здравствуйте, Господа. И как всегда вы- последняя инстанция. Ситуация такова:
Делаю рейтинг пользователей на сайте, ну то есть величина индивидуальная для каждого пользователя, что-то типа кармы- не нравится тебе человек, нажимаешь минус- карма уменьшается, плюсик- наоборот.
Карма хранится в БД, при регистрации нового пользователя по дефолту устанавливается в ноль. Воздействие на карму реализую так: на странице выводятся переменные $karma и $login, которые передаются работающей сессией:
По onclick запускается функция, в которую передается plus или minus в зависимости от нажтой кнопки, все эти данные,а так же логин пользователя, с помощью ajax отправляются php файлу, который увеличивает или уменьшает в БД значение кармы и ответом отдает текущее значение кармы. Полученое значение кармы с помощью innerHTML заменяет карму на странице :
Теперь самое сложное: попробую объяснить, что происходит. Все это дело работает, но несколько странно. Во первых- при первом нажатии значение кармы не меняется, то есть страница загрузилась, делаешь клик на плюс или минус и ничего не происходит, а вот по второму клику значение кармы меняется как положено. Но, если допустим после минуса нажать плюс, то значение еще один раз уменьшится и только по следующему клику начнет как и положено увеличиваться. Вот приведу наглядный пример: "+" вот это значит, что я нажал плюс, "-" это нажал минус, справа значение кармы в цифрах.
//загрузилась страница, пусть карма изначально 0
"+" 0 ; "+" 1 ; "+" 2 ; "-" 3 ; "-" 2; "-" 1
то же самое и в обратную сторону. Короче, я в отчаянии если запускать напрямую php файл то видно, что все выводится как положено, и значения в базу пишутся верно, глюки начинаются только когда все это передается ajax-ом
Помогите, а то сойду с ума
з.ы. Боже, вот это Война и Мир получилась. Надеюсь хоть кто-то что-то понял...
mrKotik
Отправлено: 11 Июля, 2014 - 20:32:37
Посетитель
Покинул форум
Сообщений всего: 271
Дата рег-ции: Дек. 2013
Помог: 0 раз(а)
И так смотри, в консоле что выдает когда жмешь на +/- какую ошибку он выдаст) И смотри чальзом что отправляет ajax на php скрипт
MikaBi
Отправлено: 11 Июля, 2014 - 21:18:02
Новичок
Покинул форум
Сообщений всего: 21
Дата рег-ции: Июнь 2014
Помог: 0 раз(а)
mrKotik пишет:
Спасибо ты появился) В консоле, это я так понимаю в отладчике хрома например? Смотрю, но там пусто вообще, на любые действия никаких сообщений в том числе и ошибок. А Чальз это, простите, что?
(Добавление)
Вот еще что, в отладчике хрома включил Call stack асинхронные запросы, так вот он показывает, что при первом нажатии на плюс или минус запрос отправляется. Но почему изменения начинаются только если второй раз нажать? Мистика... (Добавление)
Побеседую пока еще сам с собой) Попробовал через IE запустить, там не работает вообще, браузер выдает ошибку "
Сообщение: Несоответствие типа
Строка: 42
Символ: 2
Код: 0
URI-код: http://mysite.com/ajax/ajax_framework.js"
строка 42 в моем коде это: xmlhttp.onreadystatechange= stat();
эт я так уж, от безысходности. Может кого-то подтолкнет на мысль какую-нибудь...
LIME
Отправлено: 11 Июля, 2014 - 23:03:26
Активный участник
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
нормальные люди юзают jquery
$.ajax(...);
MikaBi
Отправлено: 12 Июля, 2014 - 02:49:23
Новичок
Покинул форум
Сообщений всего: 21
Дата рег-ции: Июнь 2014
Помог: 0 раз(а)
фуф... сделал. Спасибо, LIME. Но не оставляет ощущение костыля и быдло-кода. Посмотрите, как я впихнул PHP переменную в JQuery... за это в аду спец.котлы выдавать будут, я уверен.
В общем, скажите, как бы это можно было сделать поэлегантнее?
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
Viper пишет:
LIME кого убрать?
повторение одинаковой ф-ции отличающейся лишь одним параметром
любое ее изменение повлечет за собой потенциальную возможность забыть скопипастить во вторую
я думал ты уж знаешь
Viper пишет:
вот этого как раз таки делать и не стоит.
как-раз таки очень стоит
чтоб вынести js в отдельный файл
либо как вариант сделать глобальную переменную в шаблоне
но это как-раз таки и не очень (Добавление)
Viper пишет:
В вашем коде вы забыли что у ТС меняется картинка при наведении.
не забыли
решили что достаточно твоего поста и не стоит возвращаться к очевидному
DelphinPRO пишет:
LIME, логин тоже через атрибут и почти идеально
мне не интересно давать готовый законченный код
мой только демонстрирует мыслю
отвечать на этом ресурсе это как прыщи давить
хорошего ничего а остановиться сложно
так и тянет еще прыщик поискать))
DelphinPRO
Отправлено: 12 Июля, 2014 - 11:55:00
Активный участник
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
LIME пишет:
как-раз таки очень стоит
чтоб вынести js в отдельный файл
либо как вариант сделать глобальную переменную в шаблоне
но это как-раз таки и не очень
абсолютно согласен
Viper пишет:
вот этого как раз таки делать и не стоит.
но все же интересно, почему? (Добавление)
и, блин, люди, зачем вы так пишете
это дико неудобно и нечитаемо. используйте нотацию объекта (как в моем примере).
----- Чем больше узнаю, тем больше я не знаю.
LIME
Отправлено: 12 Июля, 2014 - 12:50:07
Активный участник
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
DelphinPRO пишет:
это дико неудобно и нечитаемо
вранье
сам пользую объект но не вижу особого неудобства в строке (Добавление)
единственно что нельзя использовать объект формируемый где-то еще
но не сталкивался на практике с такой необходимостью
Viper
Отправлено: 12 Июля, 2014 - 13:35:54
Активный участник
Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007 Откуда: Симферополь
Помог: 98 раз(а)
LIME пишет:
повторение одинаковой ф-ции отличающейся лишь одним параметром
любое ее изменение повлечет за собой потенциальную возможность забыть скопипастить во вторую
я думал ты уж знаешь
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
Viper пишет:
и чтоб ещё дрыгать ФС.
чтоб кэшировать в браузере побольше контента
ты сегодня не в духе похоже)) (Добавление)
Viper пишет:
Ну может мне ещё и за ТС все сделать?
вообще-то я на твой вопрос ответил
при чем тут ТС вообще? (Добавление)
LIME пишет:
не вижу особого неудобства в строке
а если присутствует большое количество постоянных параметров таких как ключ например
то строка даже предпочтительнее
с другой стороны если хочешь менять метод с гет на пост то конечно лучше объект
короче не однозначно
по ситуации (Добавление)
эммм...я не имел ввиду ключ доступа(не накидывайтесь на меня) )))
ключ который идентифицирует тип запроса
короче не важно(это я по последнему тз ключ вспомнил просто)
просто некоторое количество постоянных параметров
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.