Рейтинг Solspace Рейтинг вгору/вниз, використовуючи AJAX

Я намагаюся використовувати AJAX для оптимізації функції Rating Vote із рейтингу Solspace, щоб код успіху або помилки містився в тегу {exp: rating: insert_rating_vote} .

У моєму {rating: entries} шаблон у мене є цей код для вниз голосування посилання:

{exp:rating:rating_vote_stats rating_id="{rating_id}"}
{if not_already_voted}Was this review helpful?Yes  |  No{/if}
{if already_voted}Was this review helpful?Thanks for your vote{/if}
{if total > 0}{up_votes}/{total} people liked this review{/if}
{/exp:rating:rating_vote_stats}  

І шаблон// vendor/rating-vote, посилання на які містять це:

{exp:rating:insert_rating_vote
    rating_id="{segment_3}"
    allow_duplicates="no"
    duplicate_check_guest_ip="no" 
}
{if failure}Error!{/if}{if success}Thanks for your vote{/if}
{/exp:rating:insert_rating_vote}

Ця настройка працює як очікується. Коли я натискаю посилання, я йду до того простого шаблону, який повертає моє повідомлення про помилку або успіх, а голосування вгору/вниз записується і показується в моїй статистиці. Я бачу:

Дякуємо за ваш голос

Коли я намагаюся завантажити шаблон через AJAX, це не працює, як очікувалося.

Я використовую цей JS-код:

$(".voters .yes, .voters .no") .click (function() {
    var link = $(this).attr("href")
    var $helpful = $(this).closest(".helpful");
    $helpful.find(".ajax-response").load(link, function() {
        $helpful.find(".voters").hide();
    });
    return false;
});

Це працює, за винятком вмісту, завантаженого в моєму просторі, не те ж саме, що й раніше. Це те, що я отримую у моєму шаблоні, де я очікую простий успіх повідомлення:

{"success": true, "failure": false, "message": "Ваш ввід є   "appreciated.", "already_reviewed": false, "not_already_reviewed": true, "prior_review_count": 0, "count": 1)

Будь-які поради щодо того, як це зробити?

4

2 Відповіді

Спробуйте:

$helpful.find(".ajax-response").load(link, function(response, status, xhr) {
    $helpful.find(".voters").hide();
    $helpful.find(".ajax-response").html(response.message);
});

Уявлення Ajax повертають масив JSON як відповідь. Вам потрібен правильний ключ (у цьому випадку - повідомлення) у цьому масиві для відображення лише тексту.

Another method for general-purpose ajax submissions can be found here: http://support.solspace.com/solution/categories/115922/folders/190597/articles/119581-simple-jquery-ajax-script

1
додано
Я реалізував це, але я все ще бачу відповідь JSON ;-(
додано Автор David A Gibson, джерело
Я до сих пір не можу отримати це працювати навіть із зазначеними змінами. Не могли б ви зайнятися ще одним поглядом на цей?
додано Автор David A Gibson, джерело
Чи спробували ви використовувати консоль.log (відповідь) з наведеним вище рішенням (в межах функції (відповідь) {...} звичайно)? Це може знадобитися переписати. Навантаження() може бути не найкращою функцією обробки відповіді.
додано Автор dubek, джерело
Я б запропонував натомість спробувати метод .ajax (), запропонований в посиланнях цього рішення. Відрегулюйте, як потрібно, залежно від вашої власної ситуації.
додано Автор dubek, джерело
@Solspace - посилання, яке ви надали у вашому відповіді, більше недоступне - у вас є ідеї про те, куди він переїхав?
додано Автор J.R., джерело

Я мав успіх з модифікованою версією універсального ajax-коду, пов'язаного Solspace:

$(".voters .yes, .voters .no") .click (function(e) {
        e.preventDefault();
        var link = $(this).attr("href")
        var $helpful = $(this).closest(".helpful");
        $.ajax({
            url: link,
            success: function(results){  
                    $helpful.find(".voters").hide();
                    $helpful.find(".ajax-response").html("Thanks for your vote");
                },
            error: function(results){
                    $helpful.find(".ajax-response").html("Error - vote not counted");
            }
        });
    });

Однак у моїх шаблонах {exp: rating: insert_rating_vote} у мене є повідомлення для успіху та невдач:

{exp:rating:insert_rating_vote
    rating_id="{segment_3}"
    allow_duplicates="no"
    duplicate_check_guest_ip="no" 
}
{if failure}Error!{/if}{if success}Thanks for your vote{/if}
{/exp:rating:insert_rating_vote}

Але за допомогою цього методу ajax мої повідомлення, де не було надіслано (я бачив відповідь за замовчуванням), навіть коли використовують results або results.message як вихід HTML. Таким чином, я закінчив жорсткий кодування відповіді в JS - не ідеальний, але в моєму випадку працює нормально.

0
додано
ІТ КПІ - JavaScript
ІТ КПІ - JavaScript
504 учасників

співтовариство javascript розробників в Telegram