Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   ajax, запрос не работает, возвращается не false (https://javascript.ru/forum/jquery/21078-ajax-zapros-ne-rabotaet-vozvrashhaetsya-ne-false.html)

SkaN 28.08.2011 00:04

ajax, запрос не работает, возвращается не false
 
function vote(voicer) {
        $.ajax({
                url: "index.php?id=ajax&action=vote",
                type: "GET",
                data: {voice: voicer, article: <?=$article ?>},
                success: function(html) {
                        $.("#voting").html(html);
                }
        });
        return false;
};

<a href="?id=article&article=<?=$article ?>&rate=good#voting" onClick="vote('good')">

$voice = $_GET['voice'];
$article = $_GET['article'];
$vote_stat = $rating_class->vote($article, $voice);
if ($vote_stat == 'ok') {
        ?>
        <span style="padding: 20px; background-color: #99FF99; border: 1px solid green;">Спасибо, ваш голос принят!</span>
        <?PHP 
}
else {
        ?>
        <span style="padding: 20px; background-color: #FF8C69; border: 1px solid red;">Ошибка отправки голоса. Обратитесь к администратору.</span>
        <?PHP 
}

Первый код: функция, которая отсылает запрос, в котором указывает статью, за которую проголосовали и какой голос (плохой или хороший). В коде HTML я указал, как обращается к функции. Поидее должно быть так: если у клиента работает JS, значит выполняется функция onclick="vote('good')" (например), которая не дает перезагружать страницу (return false). А если JS выключен, то переходит по ссылке и таким образом голосует. Такой порядок менять нельзя, такая задумка. Соответственно, код PHP дает запрос к методу, отдает ему название статьи и голос, и уже по ответу метода формирует сообщение ответа.
А вот, что происходит в реальности: я нажимаю на ссылку, страница перезагружается. Еще было бы что-то понятно, если бы начислялось два голоса, значит просто return false не работает. Но начисляется один голос, значит не работает вся функция, или только ajax();.
На самом деле в JS я немного "нубоват", иногда путаю синтаксис.

Black_Prince 28.08.2011 01:23

1. Советую протестировать с помощью firebug на предмет отправок ajax запросов.

2. напишите ссылку так:
<a href="?id=article&article=<?=$article ?>&rate=good#voting" onClick="vote('good'); return false;">

или так:
<a href="?id=article&article=<?=$article ?>&rate=good#voting" onClick="return vote('good');">

3. Возможно что аякс отрабатывает, просто происходит редирект и Вы не видите результат работы.

SkaN 28.08.2011 10:36

firebug ничего не показывает. onClick="vote('good'); return false;" не помогает. А аякс запрос точно не срабатывает, потому что я проверял по результату. В базе должно было бы прибавиться два голоса, а на деле всего один
кстати, я пробовал просто повесить на ссылку javascript: vote('good'), но ничего абсолютно не происходило. И в консоли firebug тоже

B@rmaley.e><e 28.08.2011 14:35

Консоль ошибок смотрите.
Цитата:

Сообщение от SkaN
<?=$article ?>

О, http://ru.wikipedia.org/wiki/Xss

SkaN 28.08.2011 19:53

консоль ошибок смотрел, ничего - чисто. а по поводу <?= ?> - шаблонизатор требует полного переписания, безнадежно устарел))

B@rmaley.e><e 28.08.2011 20:14

Хорошо, покажите, что генерирует
function vote(voicer) {
        $.ajax({
                url: "index.php?id=ajax&action=vote",
                type: "GET",
                data: {voice: voicer, article: <?=$article ?>},
                success: function(html) {
                        $.("#voting").html(html);
                }
        });
        return false;
};

SkaN 29.08.2011 10:01

$.(...
тут между скобкой и $ не должно быть точки, тогда работает. + желательно не data: {voice: voicer, article: <?=$article ?>}, а article передавать сторым параметром. И вызывать так: onClick="return vote('good', '<?=$article ?>');". теперь все работает


Часовой пояс GMT +3, время: 06:48.