ajax応答magento 2の後に初期化jsが必要


7

私はajaxscroll製品に取り組んでいますが、以下の応答を得たときにスクリプトが初期化されません

<script type="text/x-magento-init">
        {
            "[data-role=tocart-form], .form.map.checkout": {
                "catalogAddToCart": {}
            }
        }

</script>

誰かが応答後にスクリプトを初期化するのを手伝ってくれる?


1
どのajaxscroll拡張機能を使用しましたか?
Rakesh Jesadiya 2016年

自分で作成しています。最初のページでは製品のajax addto cartは機能していますが、ajaxの応答では機能していません
Prashant Valanda

同じ問題が発生しましたが、この問題を解決しましたか?
マイク、

はい、ページにaddtocart require関数を追加してこの問題を解決しました。これは適切な方法ではありませんが、一時的な解決策です
Prashant Valanda '21

@Dmitry私はそれを試して問題を解決しました。それは私のために働いています。
Prashant Valanda 16

回答:


11

同じ問題があり、ajax呼び出しの後にcatalogAddToCartを呼び出すことで解決しました。

ここにコードスニペットがあります

$.ajax({
    dataType: 'html',
    type: 'GET',
    url:url,
    success: function(data){
        var data =  $($.parseHTML(data));
        var productList = data.find('.products.list').html(); 
        productWrapper.append(productList);
        // this solved the problem
        $( "form[data-role='tocart-form']" ).catalogAddToCart(); 
    },
});

1
ありがとうございます。$( "form [data-role = 'tocart-form']").catalogAddToCart();
Jalpesh Patel 2017

エラーTypeError:$(...)。catalogAddToCartは関数ではありません
Magecode

定義後は、catalogAddToCart()を使用していることを確認してください。
Arun Karnawat 2017

@ArunKarnawat、このコードをどこに追加しますか?どのファイルですか?私は無限スクロールを使用しています
jafar pinjar

うわー、このコードを保存してくれてありがとう、$( "form [data-role = 'tocart-form']").catalogAddToCart(); 本当に役に立ちました。
gajjala sandeep

6

私は以下のコードを使用してこの問題を解決しました:

htmlObject=jQuery("#custom_search_autocomplete").html(result);  

htmlObject.find('[data-role=autocompletesearch-tocart-form], .form.map.checkout').attr('data-mage-init', JSON.stringify({'catalogAddToCart': {}}));             
htmlObject.trigger('contentUpdated');

私も同じ問題に直面していますが、この問題をどのように解決しましたか?カートに追加機能を再初期化する必要があります
jafar pinjar

2

受け入れられた回答から、私は少し理解しやすいこの一般的なソリューションを作りました:

$(document).ajaxComplete(function() {

    $('[data-mage-init]').each(function() {
        var mageInit = $(this).attr('data-mage-init');

        if (typeof mageInit !== 'undefined') {
            var script = document.createElement("script");
            script.type = "text/x-magento-init";
            script.text = '{"*":' + mageInit.trim() + '}';
            $(this)[0].appendChild(script);
            $(this).trigger('contentUpdated');
            $(this).removeAttr('data-mage-init');
        }
    });

});

要素とは何ですか?動いていない。コードは完全ですか?
Magecode

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.