Рефакторинг Jquery: разбор JSON - PullRequest
1 голос
/ 20 апреля 2011

Я использую следующий код для двух ссылок: a.vote-down-0 и a.vote-up-0, они делают то же самое, за исключением того, что каждая из них указывает, будет ли голосование вверх или вниз.

$('a.vote-down-0').click(function() {

    var id = $(this).siblings('.reply-id').val();
    var ajax_auth_token = $('#auth_token').val();
    var c_button = this;


    $.post('user/?action=ajax', {
        vote_type: 'down',
        reply_id: id,
        auth_token: ajax_auth_token
    }, function(data, return_status) {   //return status is just if ajax works or not

        var json_data = jQuery.parseJSON(data);

        switch(json_data.r_message)
        {
           case "success": 
              output = "Yay it works!"; // change 
              $(c_button).removeClass('vote-down-0').addClass('vote-down-1');
              $(c_button).siblings('a.vote-up-0').addClass('vote-up-1').removeClass('vote-up-0'); // ** TODO: this needs to be repeated for all cases below**
           break;

           case "no_vote":
              output = "You've run  out of negative votes.";
           break;

           case "vote_limit":
              output = "You can vote anymore today. Limit is 25 per day.";
           break;

           case "login": 
              output= "You need to login before you can vote.";
           break;

           case "own":
              output = "You cannot vote on your own comment.";
              $(c_button).removeClass('vote-down-0').addClass('vote-down-1');

           break;

           case "already":
              output ="You have already voted on this.";
           break;

           case "session":
              output = "Your login session has expired, please login again.";
           break;

    }

alert(output);

Здесь читается ответ, отправленный обратно через Json, и выдается отдельное предупреждение для каждого случая.

Есть ли более простой способ сделать это? Как это может быть пересмотрено?

1 Ответ

1 голос
/ 20 апреля 2011

Вы можете попробовать изменить класс ваших тегов a с

<a class="vote-up-0"> 

на

<a class="vote-0 up">

, затем вы можете реорганизовать две функции следующим образом:

$('a.vote-0').click(function() {
    var voteType =  $(this).is('.up') ? 'up' : 'down';

    ... snip ...

    $.post('user/?action=ajax', {
        vote_type: voteType,
        reply_id: id,
        auth_token: ajax_auth_token
    }
    ...

Код для case success тогда просто становится:

$(c_button).removeClass('vote-0').addClass('vote-1');
$(c_button).siblings('a.vote-0').addClass('vote-1').removeClass('vote-0');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...