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.


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

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');

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

});

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');**
    },
});
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.