0

投稿を使用して、fancybox iframe から Django ビューにデータを渡す必要があります。iframe のタイトルを、ユーザーがクリックできる「a href」リンクとして設定しました。

これはファンシーボックスのコードです:

    $(".fancybox-company").fancybox({
    width       : '75%',
    height      : '75%',
    autoSize    : false,
    closeClick  : false,
    fitToView   : false,
    openEffect  : 'none',
    closeEffect : 'none',
    type : 'iframe',
    beforeLoad: function() {
        var id = $(this.element).data('company-id');
        this.title = "<a href=\"\" id=company-iframe>Add to your list</a>";
    }
});

これは、クリック イベントをリッスンするコードです。

$( ".company-iframe" ).on( 'click', function ( event ) {

    event.preventDefault();

    var id = event.target.href;

    $.post( "/company/selection", { id : id }, function ( json ) {

      // ...

    } );

これは呼び出されていません。クリック イベントを iframe から親に渡し、会社 ID を入力として渡す必要があります。

私は何が欠けていますか?

10倍

4

1 に答える 1

0

csrf トークンが不足していると思います。これは、クロス サイト リクエスト フォージェリを防止するためのdjango メカニズムです。すべての投稿リクエストよりもミドルウェア クラスで csrf を有効にしている場合は、データに「csrfmiddlewaretoken」を提供する必要があります。{% csrf_token %} タグを使用して、Cookie またはテンプレートから直接アクセスできます。

テンプレートでこのトークンを取得したら、js 関数を次のように変更する必要があります。

$( ".company-iframe" ).on( 'click', function ( event ) {

    event.preventDefault();

    var csrfmiddlewaretoken = $('input[name=\"csrfmiddlewaretoken\"]').val();
    var id = event.target.href;

    $.post( "/company/selection", 
             { id : id , csrfmiddlewaretoken: csrfmiddlewaretoken},
             function ( json ) {

      // ...

    } );
于 2012-12-04T16:10:55.290 に答える