Solspace AJAXを使用した投票の上/下の投票

私はAJAXを使用してSolspace RatingのRating Vote機能を合理化し、 {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;
});

これは、私のスパンにロードされたコンテンツが、前に取得した出力と同じでないことを除いて、機能します。これは私が簡単な成功のメッセージを期待する私のテンプレートで得られるものです:

{"成功":真、 "失敗":偽、 "メッセージ": "あなたの入力は   "、" 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配列をレスポンスとして返します。テキストのみを表示するには、この配列に正しいキー(この場合は.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,
@ソルスpace - 答えにあなたが提供したリンクはもはや到達可能ではありません。移動した場所を知っていますか?
追加された 著者 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
追加された
JavaScript - 日本のコミュニティ
JavaScript - 日本のコミュニティ
2 参加者の

日本人コミュニティのjavascript