Necessidade de inicialização js após resposta do ajax magento 2


7

Estou trabalhando no produto ajaxscroll, mas quando recebi a resposta abaixo do script não inicialize

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

</script>

Alguém pode me ajudar a inicializar o script após a resposta.


1
qual extensão ajaxscroll você usou?
Rakesh Jesadiya

Estou criando o meu. Na primeira página ajax produto addto carrinho de trabalho, mas em ajax resposta que não está funcionando
Prashant Valanda

Eu tenho o mesmo problema, você resolveu esse problema?
21716 Mike

Sim, eu ter resolvido este problema adicionando addToCart exigem função em minha página não é um bom caminho, mas é uma solução temporária para mim
Prashant Valanda

@ Dmitry Resolvi o problema, tente com ele. Está funcionando para mim.
Prashant Valanda

Respostas:


11

Eu tenho o mesmo problema e o resolvi chamando catalogAddToCart após a chamada ajax.

Aqui está o trecho de código

$.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
Obrigado, funciona para mim. $ ("form [data-role = 'tocart-form']") .catalogAddToCart ();
Jalpesh Patel

É me dar erro TypeError: $ (...). CatalogAddToCart não é uma função
Magecode

verifique se você está usando catalogAddToCart () depois de definido.
Arun Karnawat

@ArunKarnawat, Onde adicionar este código? Em qual arquivo? Eu estou usando rolagem infinita,
Jafar pinjar

Você salvou meu dia e obrigado por este código $ ("form [data-role = 'tocart-form']") .catalogAddToCart (); Realmente util.
gajjala sandeep 28/01

6

Resolvi esse problema usando o código abaixo:

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

Também estou enfrentando o mesmo problema. Como você resolveu esse problema? Eu preciso re-init add ao carrinho função
Jafar pinjar

2

A partir da resposta aceita, criei esta solução genérica que é um pouco mais fácil de entender:

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

});

O que é elemento? não está funcionando. seu código está completo?
Magecode 8/09/17

1

Exemplo abaixo:

$.ajax({
    dataType: 'html',
    type: 'GET',
    url:url,
    success: function(data){
..............
**$('body').trigger('contentUpdated');**
    },
});
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.