AJAX kullanarak Solspace Rating oylama/indirme

Solspace Rating'in Oylama Oylama özelliğini düzene sokmak için AJAX'ı kullanmaya çalışıyorum; böylece {exp: rating: insert_rating_vote} etiketindeki başarı veya hata kodu.

{Rating: entries} şablonumda aşağı yukarı oylama bağlantıları için bu koda sahibim:

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

Ve/satıcı/derecelendirme-oylama şablonu bu bağlantıları içerir:

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

Bu kurulum beklendiği gibi çalışır. Bağlantıyı tıklattığımda, başarısızlık veya başarı iletimi veren basit bir şablona gidiyorum ve yukarı/aşağı oy kaydedildi ve istatistiklerim içinde gösteriliyor. Anlıyorum:

Oyunuz için teşekkürler

Şablonu AJAX aracılığıyla yüklemeye çalıştığımda beklendiği gibi çalışmıyor.

Bu JS kodunu kullanıyorum:

$(".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;
});

Bu, yayıma yüklenen içerik dışında çalışır, daha önce aldığım çıkışla aynı değil. Şablonumda basit başarı mesajını beklediğim şey bu:

{"başarı": true, "failure": false, "message": "Girişiniz   Takdir "" already_reviewed. ": yanlış" not_already_reviewed ": doğru," prior_review_count "0" sayısı ": 1}

Bunun nasıl çalışacağına dair herhangi bir tavsiye var mı?

4

2 cevap

Deneyin:

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

Ajax gönderimleri, bir JSON dizisini yanıt olarak döndürür. Sadece metin görüntülemek için bu dizide doğru anahtarı (bu durumda .message) gerekir.

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
katma
Bunu hayata geçirdim ama hala JSON yanıtını görüyorum;
katma yazar David A Gibson, kaynak
Yukarıdaki değişimle bile çalışmaya devam edemiyorum. Buna başka bir göz atmayı düşünür müsün?
katma yazar David A Gibson, kaynak
Yukarıdaki çözümle birlikte console.log'u (yanıtı) kullanmayı denediniz ( işlevinde (yanıt) {...} içerisinde)? Bunun yeniden yazılması gerekebilir. yük() yanıtı işlemek için en iyi işlev olmayabilir.
katma yazar dubek, kaynak
Bunun yerine bu çözümün linkinde önerilen .ajax() yöntemini denemenizi tavsiye ederim. Kendi durumunuza göre gereken şekilde ayarlayın.
katma yazar dubek, kaynak
@Solspace - Cevabınızda sağladığınız bağlantıya artık erişilemiyor - nereye taşındığı hakkında bir fikriniz var mı?
katma yazar J.R., kaynak

Solspace tarafından bağlanan genel ajax kodunun değiştirilmiş bir sürümü ile başarı elde ettim:

$(".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");
            }
        });
    });

Ancak, {exp: rating: insert_rating_vote} şablonlarında, başarı ve başarısızlık gibi iletilerim var:

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

Ancak bu ajax yöntemiyle, iletileri results veya results.message HTML çıktısı olarak kullanırken bile gönderilmiyor (varsayılan yanıtı görüyordum). Bu yüzden, JS'ye cevabı kodlamak zordu - ideal değil ama benim durumumda iyi çalışıyor.

0
katma