Solspace Evaluați votul în sus/în jos folosind AJAX

Încerc să folosesc AJAX pentru a raționaliza caracteristica Votare de rating a evaluării Solspace, astfel încât codul de succes sau de eroare din tagul {exp: rating: insert_rating_vote} .

În șablonul meu {rating: entries} Am acest cod pentru legăturile de vot în sus:

{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}  

Și șablonul/vânzătorului/votului de rating pe care aceste link-uri arată că conține:

{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}

Această configurație funcționează conform așteptărilor. Când fac clic pe link, mă duc la acel șablon simplu care îmi întoarce mesajul de eșec sau succes și votul în sus/în jos este înregistrat și afișat în statisticile mele. Văd:

Vă mulțumim pentru votul dvs.

Când încerc să încărc șablonul prin AJAX, nu funcționează așa cum era de așteptat.

Folosesc acest cod 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;
});

Acest lucru funcționează, cu excepția conținutului încărcat în intervalul meu nu este la fel ca ouput am primit înainte. Aceasta este ceea ce am în șablonul meu unde mă așteptam la mesajul de succes simplu:

{"success": true, "failure": false, "message": "Intrarea ta este   apreciat "" already_reviewed. ": fals" not_already_reviewed ": true" prior_review_count ": 0" count ": 1}

Orice sfat despre cum să obțineți acest lucru?

4

2 răspunsuri

Încerca:

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

Articolele Ajax returnează o matrice JSON ca răspuns. Aveți nevoie de cheia corectă (în acest caz .message) în acest câmp pentru a afișa numai text.

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
adăugat
Am implementat acest lucru, dar încă mai văd răspunsul JSON ;-(
adăugat autor David A Gibson, sursa
Încă nu reușesc să funcționez chiar și cu schimbarea de mai sus. Vrei să te mai gândi la asta?
adăugat autor David A Gibson, sursa
Ați încercat să utilizați console.log (răspunsul) cu soluția de mai sus (în cadrul funcției (răspunsul) {...} , desigur)? Ar putea fi nevoie de o rescriere. load() poate să nu fie cea mai bună funcție pentru a face față răspunsului.
adăugat autor dubek, sursa
Aș sugera în schimb încercarea metodei .ajax() sugerată în legătură cu această soluție. Reglați-vă după cum este necesar în funcție de situația proprie.
adăugat autor dubek, sursa
@Solspace - link-ul pe care l-ați furnizat în răspunsul dvs. nu mai este accesibil - aveți idee unde sa mutat?
adăugat autor J.R., sursa

Am avut succes cu o versiune modificată a codului generic ajax legat de 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");
            }
        });
    });

Cu toate acestea, în șabloanele mele {exp: rating: insert_rating_vote} am mesaje pentru succes și eșec, cum ar fi:

{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}

Dar cu această metodă ajax mesajele mele unde nu sunt trimise (vedeam răspunsul implicit) chiar și atunci când utilizați results sau results.message ca ieșire HTML. Așa că am ajuns codul greu de cod în JS - nu ideal, dar în cazul meu funcționează bine.

0
adăugat
JavaScript, România - Moldova
JavaScript, România - Moldova
254 participanți

Comunitatea Română JavaScript: github.com/js-ro Pentru confort, opriți notificările. Parteneri: @node_ro, @php_ro, @python_ro, @seo_ro, @RomaniaGroup, @ai_ro, @Grupuri_IT Offtop: @holywars_ro Joburi: @js_jobs_ro Sponsored with ❤️ by ciupacabra.com

JavaScript jobs România Moldova
JavaScript jobs România Moldova
109 participanți

Pentru confort opriți notificările. Vorbim despre posturi de muncă și freelance, proiecte proprii.