Solspace Rating AJAX көмегімен дауыс/жоғары дауыс

Мен Solspace Rating-дың Дауыс беру мүмкіндігін жетілдіру үшін AJAX-ды қолдануға тырысамын, сондықтан {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}  

Және бұл сілтемелердің/жеткізуші/рейтинг-дауыс үлгісі мыналарды қамтиды:

{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»: шын, «сәтсіздік»: жалған, «хабарлама»: «Сіздің кірісіңіз   «,» already_reviewed «: false,» not_already_reviewed «: шын,» pre_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 жиымын жауап ретінде қайтарады. Тек мәтінді көрсету үшін сізге осы жиымда дұрыс кілт (бұл жағдайда .message) қажет.

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, көзі
Жоғарыда көрсетілген шешіммен ( function (response) {...} ішінде) console.log (жауап) пайдаланып көрдіңіз бе? Бұл қайта жазуды қажет етуі мүмкін. load() жауапты өңдеу үшін ең жақсы функция болмауы мүмкін.
қосылды автор dubek, көзі
Мен осы шешімнің сілтемесінде ұсынылған .ajax() әдісін сынауды ұсынамын. Қажет болған жағдайда өз жағдайыңызға қарай реттеңіз.
қосылды автор dubek, көзі
@Solspace - Сіздің жауапыңызда берілген сілтеме енді қолжетімді емес - Сіз қайда орналасқандығын білесіз бе?
қосылды автор J.R., көзі

Solspace-дің байланысқан жалпы ajax кодының модификацияланған нұсқасымен сәттілікке ие болдым:

$(".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 әдісімен HTML шығарылымы ретінде results немесе results.message пайдалану кезінде де жіберілмейтін (әдепкі жауапты көрген) хабарламаларым бар. Сондықтан мен JS-ке жауапты қатаң кодтауды аяқтадым - идеал емес, бірақ менің жағдайда жақсы жұмыс істейді.

0
қосылды