Jump to content
azertyuiop12345666

Fonction ajaxCart.add() buggue si éxécuter dans .submit() jquery

Recommended Posts

Bonjour,

 

Je veux ajouter un produit à mon panier en ajax lors de la soumission d'un fomulaire comme ci :

ajaxCart.add(id, null, null, '#monbouton' ,1,null);

Cependant lorsque j'essaie je reçois une belle alerte :

 

Impossible to add the product to the cart.

 

J'ai regardé sur internet et les bugs liés au panier Ajax semblent récurrents sur Prestashop.

 

Lorsque j'éxécute la fonction hors de ma fonction jquery .submit() je n'ai pas de soucis l'ajout au panier se fait bien.

 

 

Comment pouvez-vous expliquer ce bug ?

 

Merci d'avance.

Edited by guizmo83 (see edit history)

Share this post


Link to post
Share on other sites

Hello,

 

Il vous manque peut être un token, en fonction de si c'est un POST ou UN GET, si le param ajax est communiqué peut etre aussi.? Activez le mod_dev et sinon il faut chercher dans le contrôleur à quel niveau il renvoi cette impossibilité. A priori il doit lui manquer des infos ?

 

Ce n'est pas un bug de la solution désolé mais une demande concernant du dev spécifique.

 

Cordialement

Share this post


Link to post
Share on other sites

Bonsoir, merci de votre réponse.

 

J'ai pourtant bien renseigné tous les paramètres de la fonction add().

 

Ce qui est bizarre c'est que celle ci fonctionne correctement lorsqu"elle n'est pas dans le .submit() du formulaire.

 

Il faut dire aussi que le alert n'apporte pas d'infos quand au niveau de l'erreur potentielle.

 

Rq: Lorsque j'ajoute un return false à la fin de ma fonction éxécutée au submit du formulaire je n'ai plus l'erreur mais évidemment le formulaire n'est pas transmis donc pas d'intérêt.

 

A partir de là je ne vois pas en quoi c'est du développement spécifique de simplement appeler une fonction existante dans un submit() de formulaire.

 

J'essaierai d'activer le debug pour voir si je peux avoir plus d'infos que ce alert.

Edited by guizmo83 (see edit history)

Share this post


Link to post
Share on other sites

Le submit est peut etre par defaut en POST et non en GET ?

 

Regardez dans le contrôleur, le alert n'est pas pour les devs mais pour les utilisateurs.

 

Cordialement

Share this post


Link to post
Share on other sites

Je ne soumets pas le formulaire en js.

J'attache juste un traitement lorsque le formulaire est soumis d'où:

 

$('#monform').submit(function()

{// appel à ajaxCart.add() qui renvoie l'erreur}

);

 

Mon formulaire est défini avec action="post" et est soumis avec un input type submit de manière classique.

Edited by guizmo83 (see edit history)

Share this post


Link to post
Share on other sites

Ah ok.

 

Plusieurs possibilités, le formulaire est soumis il envoit la page, le javascript est interrompu sinon il faut un return false je crois mais vous avez du le voir

 

Une fonction a une portée globale peut être ? je ne sais pas si ajaxCart est défini dans la fonction. Désolé je n'ai jamais essayé cela je crois j'ai toujours pompé la requête d'ajax vers le panier.

 

Bon courage. Cordialement

Share this post


Link to post
Share on other sites

En regardant dans le code de ajax-cart.js, j'ai vu :

//for product page 'add' button...
$('#add_to_cart input').unbind('click').click(function(){
 ajaxCart.add( $('#product_page_product_id').val(), $('#idCombination').val(), true, null, $('#quantity_wanted').val(), null);
 return false;
});

C'est l'action liée à l'appui sur le bouton "ajout au panier" dans la page produit. La aussi si j'enlève le return false alors le message d'alerte apparait mais le produit est bien ajouté contrairement à mon cas. C'est à n'y rien comprendre.

 

Alors je veux bien mettre un return false moi aussi mais ensuite comment soumettre mon formulaire dans un deuxième temps ?

Edited by guizmo83 (see edit history)

Share this post


Link to post
Share on other sites

Oui sauf que dans ce contexte, ajaxCart est defini

//JS Object : update the cart by ajax actions
var ajaxCart = {

....

on est dans l'objet.

 

Le return false; n'est pas là pour la photo, il est requis sinon la page part. Il y a un souci quelque part.....

 

Cordialement

Share this post


Link to post
Share on other sites

Le module bloc panier étant attaché à ma position header, j'ai forcément accès à cette variable dans toutes mes pages non ?

 

. La preuve l'ajout marche quand je n'éxécute pas la fonction dans le .submit().

Share this post


Link to post
Share on other sites

Il faudrait que j'arrive à faire quelque chose de ce genre :

 

$('#boutonsubmitformulaire').click(function(){

// appel à ajaxCart.add();

return false;

});

 

et séquentiellement à la fin de l'éxécution de cette fonction soumettre mon formulaire avec:

 

$('#monform").submit();

 

Ainsi l'ajout au panier fonctionnera(grâce au return false) et je soumets ensuite mon formulaire avec le submit().

 

Y-a-t-il un moyen de faire ceci ?

Edited by guizmo83 (see edit history)

Share this post


Link to post
Share on other sites

Sans tester je ne sais pas, a priori oui dans les javascripts en dessous mais peut être pas les inlines scripts. Faites une console.log(ajaxCart) dans le submit et regardez !

 

Sans avoir testé...

$('#monform').submit(function() {
console.log(ajaxCart);
if(ajaxCart)
    return ajaxCart.add(id_product, id_product_attribute, false, button, 1, whishlist);
return false;
});

Cordialement

Share this post


Link to post
Share on other sites

Finalement j'ai contourné le bug à défaut de pouvoir le résoudre.

 

J'ai ajouté mon produit au panier AJAX sur une autre action que le submit du formulaire( le change sur les input radio de mon formulaire).

 

$('#input').each(function(){

 if($(this).change(function(){

   // ajout ajax du produit

   return false;

  });

});

 

J'ai pu ensuite soumettre mon formulaire sans soucis(car plus de return false à mettre).

 

Merci.

Edited by guizmo83 (see edit history)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More