Notwendigkeit der Initialisierung js nach Ajax-Antwort Magento 2

7

Ich arbeite an einem Ajaxscroll-Produkt, aber als ich die Antwort unter dem Skript erhielt, wurde es nicht initialisiert

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

</script>

Kann mir jemand helfen, das Skript nach der Antwort zu initialisieren.

Prashant Valanda
quelle
1
Welche Ajaxscroll-Erweiterung haben Sie verwendet?
Rakesh Jesadiya
Ich erschaffe meine eigenen. In der ersten Seite Produkt Ajax Addto Cart funktioniert, aber in Ajax Antwort funktioniert es nicht
Prashant Valanda
Ich habe das gleiche Problem, haben Sie dieses Problem gelöst?
Mike
Ja, ich habe dieses Problem durch Hinzufügen der Funktion addtocart require auf meiner Seite gelöst. Dies ist kein geeigneter Weg, aber eine vorübergehende Lösung für mich
Prashant Valanda
@Dmitry Ich habe das Problem behoben. Es funktioniert für mich.
Prashant Valanda

Antworten:

11

Ich habe das gleiche Problem und habe es behoben, indem ich catalogAddToCart nach dem Ajax-Aufruf aufgerufen habe.

Hier ist das Code-Snippet

$.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(); 
    },
});
Arun Karnawat
quelle
1
Danke, dass es für mich funktioniert. $ ("form [data-role = 'tocart-form']") .catalogAddToCart ();
Jalpesh Patel
Es gibt mir Fehler TypeError: $ (...). CatalogAddToCart ist keine Funktion
Magecode
Stellen Sie sicher, dass Sie catalogAddToCart () verwenden, nachdem es definiert wurde.
Arun Karnawat
@ArunKarnawat, Wo soll dieser Code hinzugefügt werden? In welcher Datei? Ich benutze unendliche Schriftrolle,
Jafar Pinjar
Wow du hast meinen Tag gerettet und danke für diesen Code $ ("form [data-role = 'tocart-form']") .catalogAddToCart (); Wirklich hilfreich.
Gajjala Sandeep
6

Ich habe dieses Problem mit dem folgenden Code behoben:

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');
Prashant Valanda
quelle
Ich stehe auch vor dem gleichen Problem. Wie haben Sie dieses Problem behoben? Ich muss die Funktion zum Hinzufügen zum Warenkorb
neu starten
2

Aus der akzeptierten Antwort habe ich diese generische Lösung gemacht, die etwas einfacher zu verstehen ist:

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

});
OZZIE
quelle
Was ist ein Element? es funktioniert nicht. Ist Ihr Code vollständig?
Magecode
1

Beispiel unten:

$.ajax({
    dataType: 'html',
    type: 'GET',
    url:url,
    success: function(data){
..............
**$('body').trigger('contentUpdated');**
    },
});
Alexey Panteleychuk
quelle