Сочетание php и java-script.

12
[Удален]
1331

Здравствуйте.

Есть такая строка в коде:


<a href="javascript:rate_news(5, 250);void(0);"><b>Оценить новость</b></a>

Сама вызываемая функция rate_news выглядит так:


<script>
function rate_news(golos, idnews) {
$('vote_check'+idnews).style.display="none";

$('voteLoader'+idnews).style.display="block";

new Ajax.Request("rate.php?newsvote=" + idnews + "&rating=" + golos, {
method: 'post',
parameters: "newsid=" + idnews + "&mark=" + golos,
onSuccess: function(transport) {
$('voteLoader'+idnews).style.display="none";

$('vote_name'+idnews).innerHTML="<font style=font-size:100%>Новость успешно оценена</font>";

}
});

}

</script>

Работает так: при нажатии на ссылку "Оценить новость" запускается функция java-скрипта rate_news, которая, в свою очередь, вызывает php-скрипт site.ru/rate.php После этого появляется сообщение - "Новость успешно оценена". Если после этого перегрузить страницу, то ссылка "Оценить новость" исчезает, т.е. повторная оценка новости невозможна (фиксация по IP).

Проблема в том, что прокси-сервер запрещает выполнение java-скриптов, поэтому нажатие на ссылку "Оценить новость" ни к чему не приводит. Хочется сделать так, чтобы при нажатии на ссылку "Оценить новость" сразу запускался php-скрипт c необходимыми параметрами. Пробовал по-разному:

site.ru/rate.php?newsvote=250&rating=5

site.ru/rate.php?newsid=250&mark=5

site.ru/rate.php?newsvote=250&rating=5&newsid=250&mark=5

но никак не получается, уже не знаю, какте еще варианты перебрать. Знаю точно, что есть какой-то рабочий вариант подстроки, но какой - не пойму. Признаком правильного варианта является то, что после отправки команды и повторной перегрузки страницы, ссылка "Оценить новость" исчезает, т.е. голос учтен.

Может, кого-то подскажет?

antono
На сайте с 12.07.2004
Offline
302
#1

Как может прокси запрещать выполнение java скриптов? Ведь они выполняются в браузере на локальной машине. Вы хотите накрутить свою новость в какой-то социалке? Видимо там грмотно сделана защита от накруток - не плюсует с публичных прокси или вы используете открытые прокси + ваш реальный IP заносится в список уже проголосовавших.

[Удален]
#2
antono:
Как может прокси запрещать выполнение java скриптов? Ведь они выполняются в браузере на локальной машине. Вы хотите накрутить свою новость в какой-то социалке? Видимо там грмотно сделана защита от накруток - не плюсует с публичных прокси или вы используете открытые прокси + ваш реальный IP заносится в список уже проголосовавших.

Это корпоративный прокси. Не знаю, как он устроен, но ни на одной машине ява-скрипт не выполняется, хотя в браузерах все включено. Код директа, к примеру, тоже нигде не отображается.

SI
На сайте с 03.12.2007
Offline
130
#3
method: 'post',

Нужна не ссылка а форма.

-= Онлайн сервисы =-
topy
На сайте с 28.03.2006
Offline
142
#4

У вас написано


rate.php?newsvote=" + idnews + "&rating=" + golos,

вам нужно передать 2 параметра методом POST скрипту rate.php

newsvote и rating

нужно вокруг


<a href="javascript:rate_news(5, 250);void(0);"><b>Оценить новость</b></a>

сделать


<form method=POST action=rate.php>

\\ скрипт

</form>

Или передавать методом GET (как передаете вы), но тогда переменные нужно принять GET`ом в скрипте rate.php.

Но никак не пойму как прокси может блокировать JS и зачем это делать???

PS теперь понимаю откуда в статистике посещений сайта появляется 1% отключенных JS

PPS если нид хелп - в личку, помогу. Тут вопрос пары строк.

Новости коротко и ясно (https://subnews.ru)
G
На сайте с 01.10.2007
Offline
16
#5

если грешите на прокси, проверьте сначала на локальной машине...

теперь на счёт кода:

я так понимаю вы юзаете js-фрэймворк prototype ?

конечно простите за не скромность, но ваш код ужасен...

Надо так:

<script type="text/javascript">

<!--//

function rate_news(golos, idnews) {

/*

* глядя на 2-е строчки ниже, я завис... вам не кажется, что они здесь ни к чему? По крайней мере обе

* В любом случае, если Вы юзаете prototype то лучше делать по другому, в комментариях написал как

*/

$('vote_check'+idnews).style.display="none"; // $('vote_check'+idnews).hide();

$('voteLoader'+idnews).style.display="block"; // $('vote_check'+idnews).show();

/**

* Теперь запрос, проще всего передать GET методом, и в php скрипте получать с помощью супер глобального массива $_GET

*/

new Ajax.Request("rate.php?newsvote=" + idnews + "&rating=" + golos, {

method: 'get', // как уже заметили post метод тут не обязателен

onSuccess: function(transport) {

$('voteLoader'+idnews).hide();

$('vote_name'+idnews).innerHTML='Новость успешно оценена';

}

});

}

//-->

</script>

G
На сайте с 01.10.2007
Offline
16
#6

если грешите на прокси, проверьте сначала на локальной машине...

теперь на счёт кода:

я так понимаю вы юзаете js-фрэймворк prototype ?

конечно простите за не скромность, но ваш код ужасен...

Надо так:


<script type="text/javascript">
<!--//
function rate_news(golos, idnews) {
/*
* глядя на 2-е строчки ниже, я завис... вам не кажется, что они здесь ни к чему? По крайней мере обе
* В любом случае, если Вы юзаете prototype то лучше делать по другому, в комментариях написал как
*/
$('vote_check'+idnews).style.display="none"; // $('vote_check'+idnews).hide();

$('voteLoader'+idnews).style.display="block"; // $('vote_check'+idnews).show();

/**
* Теперь запрос, проще всего передать GET методом, и в php скрипте получать с помощью супер глобального массива $_GET
*/
new Ajax.Request("rate.php?newsvote=" + idnews + "&rating=" + golos, {
method: 'get', // как уже заметили post метод тут не обязателен
onSuccess: function(transport) {
$('voteLoader'+idnews).hide();
$('vote_name'+idnews).innerHTML='Новость успешно оценена';
}
});

}
//-->
</script>
G
На сайте с 01.10.2007
Offline
16
#7

Если вам надо по каким-то причинам, указанным из космоса, отправлять подобный запрос с помощью POST метода, нужно сделать так:


new Ajax.Request("rate.php", {
method: 'post', // как уже заметили post метод тут не обязателен
parameters: {newsvote: idnews, rating: golos},
onSuccess: function(transport) {
$('voteLoader'+idnews).hide();
$('vote_name'+idnews).innerHTML='Новость успешно оценена';
}
});
[Удален]
#8

Поясню - я не имею доступа к этому скрипту. Поэтому нужно решить указанную проблему внешним путем, например, через подбор строки в браузере и т.п.

Кто первым сообразит, как это сделать, получит 20 вмз (или 500 я.д.)

Подробнее за тех.заданием прошу в личку. Актуально сегодня, максимум завтра.

K
На сайте с 12.07.2006
Offline
295
Kpd
#9

dbond80, enthusiast award ? :D

SI
На сайте с 03.12.2007
Offline
130
#10

<form method="post" action="rate.php?newsvote=250&rating=5">

<input type="hidden" name="newsid" value="250" />
<input type="text" name="mark" value="5" />
<input type="submit" />
</form>
12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий