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.