Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Рейтинг новости (https://javascript.ru/forum/jquery/46640-rejjting-novosti.html)

SLameN 17.04.2014 21:11

Рейтинг новости
 
Делаю рейтинг новости, но вот, что-то не получается (не работает), скажите, что здесь не так? Может быть я не подключил какую-то библиотеку...

<div id='rating'>
<div id='rat_res'>показывается рейтинг из БД</div>
<div id='rat_green' tid='ИД новости'></div>
</div>


<script type="text/javascript">
        $(document).ready(function(){
            $('#rat_green').click(function(){
                var tid = $(this).attr("tid");
                
                $.ajax({
                    type: "POST",
                    url: "/like.php",
                    data: "id="+tid,
                    dataType: "html",
                    cache: false,
                    success: function(data)
                    {
                        if(data == 'no')
                        {
                            alert('Вы уже голосовали');
                        }
                        else
                        {
                            $("#rat_res").html(data);
                        }
                    }
                });
            });
        });
    </script>

SLameN 17.04.2014 21:54

После редактирования есть улучшения, выдает сообщение: Вы уже голосовали, т.е. data == 'no'

SLameN 17.04.2014 23:21

Что еще обнаружил, на других новостях (кроме 1) ничего вообще не происходит... Зашел через IE и начал делать рейтинг 1 сообщения, и РАБОТАЕТ, но :D я могу добавлять сколько хочу.... на других новостях не работает

jsnb 18.04.2014 04:12

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

SLameN 18.04.2014 11:09

Даже если я вот так сделаю в файле like.php:
$id = (int)$_POST["id"];
echo $id;


То работает только первой новости, на остальных не работает. В Chrome 1 новость тоже заработала. Я думаю, что ошибка в JS, потому что не приходят данные с других новостей (кроме первой). tid проверил, все уникально, ИД верные

//1 новость
<div id='rating'>
<div id='rat_res'>показывается рейтинг из БД</div>
<div id='rat_green' tid='ИД новости'></div>
</div>

//2 новость
<div id='rating'>
<div id='rat_res'>показывается рейтинг из БД</div>
<div id='rat_green' tid='ИД новости'></div>
</div>

//3 новость
<div id='rating'>
<div id='rat_res'>показывается рейтинг из БД</div>
<div id='rat_green' tid='ИД новости'></div>
</div>

jsnb 18.04.2014 11:24

Цитата:

Сообщение от SLameN (Сообщение 308205)
//1 новость
<div id='rating'>
<div id='rat_res'>показывается рейтинг из БД</div>
<div id='rat_green' tid='ИД новости'></div>
</div>

//2 новость
<div id='rating'>
<div id='rat_res'>показывается рейтинг из БД</div>
<div id='rat_green' tid='ИД новости'></div>
</div>

//3 новость
<div id='rating'>
<div id='rat_res'>показывается рейтинг из БД</div>
<div id='rat_green' tid='ИД новости'></div>
</div>

Так id у дивов куда вставлять надо рейтинг что ли одинаковый? И у тех которые кликать надо тоже? И куда по вашему каллбек должен данные поместить?

SLameN 18.04.2014 12:16

И как мне быть в этой ситуации? :(

jsnb 18.04.2014 14:01

Цитата:

Сообщение от SLameN (Сообщение 308220)
И как мне быть в этой ситуации?

Ну сделайте для дивов куда должны попадать результаты какие-нибудь идентификаторы, тот же tid и ориентируясь по ним вставляйте данные.
Т.е. в HTML сделать что-то типо этого:
<div id='rating'>
<div class='rat_res' tid='111'>показывается рейтинг из БД</div>
<div class="rat_green" tid='111'></div>
</div>

<div id='rating'>
<div class='rat_res' tid='222'>показывается рейтинг из БД</div>
<div class="rat_green" tid='222'></div>
</div>

<div id='rating'>
<div class='rat_res' tid='333'>показывается рейтинг из БД</div>
<div class="rat_green" tid='333'></div>
</div>


А в JS что-то типо этого:
$(document).ready(function () {
  $('.rat_green').click(function () {
    var tid = $(this).attr("tid");
    $.ajax({
      type: "POST",
      url: "/like.php",
      data: "id=" + tid,
      dataType: "html",
      cache: false,
      success: function (data) {
        if (data == 'no') {
          alert('Вы уже голосовали');
        } else {
          $(".rat_res[tid="+tid+"]").html(data);
        }
      }
    });
  });
});

SLameN 18.04.2014 14:16

Работает :) А Другого способа нет? Это ж сколько строк JS будет, а еще CSS...

<script type='text/javascript'>
$(document).ready(function(){
    $('#rat_green1').click(function() {
        var tid = $(this).attr('tid');
        
        $.ajax({
            type: 'POST',
            url: '/like.php',
            data: 'id='+tid,
            dataType: 'html',
            cache: false,
            success: function(data)
            {
                if(data == 'no')
                {
                    alert('Вы уже голосовали');
                }
                else
                {
                    $('#rat_res1').html(data);
                }
            }
        });
    });
})
</script>

<div id='rating'>
<div id='rat_res1'>Рейтинг</div>
<div id='rat_green1' tid='1'></div>


<script type='text/javascript'>
$(document).ready(function(){
    $('#rat_green2').click(function() {
        var tid = $(this).attr('tid');
        
        $.ajax({
            type: 'POST',
            url: '/like.php',
            data: 'id='+tid,
            dataType: 'html',
            cache: false,
            success: function(data)
            {
                if(data == 'no')
                {
                    alert('Вы уже голосовали');
                }
                else
                {
                    $('#rat_res2').html(data);
                }
            }
        });
    });
})
</script>

<div id='rating'>
<div id='rat_res2'>Рейтинг</div>
<div id='rat_green2' tid='2'></div>

jsnb 18.04.2014 14:21

Цитата:

Сообщение от SLameN (Сообщение 308240)
Работает :) А Другого способа нет? Это ж сколько строк JS будет, а еще CSS...

Я там обновил предыдущий пост, там показал как примерно можно сделать HTML чтобы в JS можно было просто находить нужные элементы.
Еще при такой структуре HTML можно находить элемент через prev(), но тогда при смене порядка тегов всё будет плохо.

SLameN 18.04.2014 14:32

Большое спасибо вам за помощь!


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