التصويت على التصويت Solvia/Up باستخدام AJAX

أحاول استخدام AJAX لتبسيط ميزة التصويت التصويت في تقييم 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;
});

هذا يعمل ما عدا المحتوى الذي تم تحميله في امتداد بلدي ليس هو نفس ouput حصلت عليه من قبل. هذا ما أحصل عليه في النموذج الخاص بي حيث أتوقع رسالة نجاح بسيطة:

{"success": true، "failure": false، "message": "Your input is   تقدير "،" already_reviewed. ": كاذبة،" not_already_reviewed ": صحيح،" prior_review_count ": 0،" العد ": 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, مصدر
هل حاولت استخدام console.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}

ولكن مع هذه الطريقة أجاكس رسائلي حيث لا يتم إرسالها (كنت أرى الاستجابة الافتراضية) حتى عند استخدام النتائج أو results.message كمخرج HTML. لذا انتهى بي الأمر إلى تشفير الرد على JS - ليس مثاليًا ولكن في حالتي يعمل بشكل جيد.

0
وأضاف