Bonjour, j'ai un problèmes lors de la soumission de mes données à l'aide d'ajax quand je clique sur le bouton pour soumettre le formulaire rien ne se passe et mes requette en POST ne fonctionne pas

voici mon code HTML

<form method="POST" action="<?= URL ?>account/generRequet/notification&ud03">

              <?php if(isset($setting->Success['notification'])) { echo $setting->Success['notification']; } ?>

              <div style="margin: 4% 3% 1px;padding: 13px;">

              <label class="ios7-switch" style="font-size: 19px;margin: 0 0 5%;">
                <input name="promotions" type="checkbox" <?= $setting->checkboxN('promotions') ?>><span></span> 
                <span style="font-size: 13px;">M'informer des promotions et ventes flash</span>
              </label>

              <label class="ios7-switch" style="font-size: 19px;margin: 0 0 5%;">
                <input name="statOrder" type="checkbox" <?= $setting->checkboxN('statOrder') ?>><span></span>
                <span style="font-size: 13px;">M'informer du statut de mes commandes</span>
              </label>

              <label class="ios7-switch" style="font-size: 19px;">
                <input name="newStore" type="checkbox" <?= $setting->checkboxN('newStore') ?>><span></span> 
                <span style="font-size: 13px;">M'informer des nouveautés de la boutique</span>
              </label>

              </div>
              <br>
              <div class="settings_btn">
                  <button class="btn-cart btn-default btn100 display checkbox" type="submit" name="checkbox">Sauvegarder</button>
              </div>
            </form>

Code PHP

$_POST['checkbox'] c'est à partir de la que j'ai un problème :/

if(isset($_POST['checkbox'])) {

                var_dump('expression');

                $promotions = isset($_POST['promotions']) ? $_POST['promotions'] : null;

                $statOrder = isset($_POST['statOrder']) ? $_POST['statOrder'] : null;

                $newStore = isset($_POST['newStore']) ? $_POST['newStore'] : null;

                // $style = "color: #fdfdfd; top: -3px; font-size: 14px; position: relative; background: #2196f3; padding: 7px;";

                // $this->Success['notification'] = "<div style='$this->MinCssSuccess'>Les informations ont été mises à jour</div>";

                $json = ['error' => false];

                $json['checkbox'] = "Vos préférences ont été mis à jour";

                return $this->dbnotification($promotions, $statOrder, $newStore);

            }

Code ajax

$('.checkbox').click(function(e) {

        $('form').on('submit',function(e){

            e.preventDefault();

            $.ajax({
                type     : "POST",
                cache    : false,
                dataType : "json",
                url      : $(this).attr('action'),
                data     : $(this).serialize(),
                success  : function(data) {

                  if(data.error == false) {

                    console.log(data)

                  } else {

                    console.log(data)

                  }

                  return false;

                } 

            });

        });

    });

3 réponses


Si tu mets un point devant checkbox, cela signifie qu'il y a une classe "checkbox"
retire le point

$('checkbox').click(function(e) {
...

Une checkbox a 2 états, es-tu sûr de submit ton formulaire lorsqu'on décoche la checkbox ?
tu devrais faire un test dans le onSubmit pour voir l'état de la checkbox et voir s'il faut lancer l'ajax ou pas.

Motel
Auteur

@Huggy salut merci pour ta réponse j'ai essayé sans le point mais ça ne fonctionne toujours pas ça me dirige directement sur la page php

D'accord avec @Huggy, il faut d'abord écouter l'event submit de ton form et réaliser un test pour vérifier que la case est cochée...
De plus, il ne faut JAMAIS se contenter de récupérer les données brutes passées en POST. Il faut les vérifier et les valider, question de sécurité.
En effet, le js s'exécute côté client et un client mal intentionné peut envoyer n'importe quoi à ton serveur (je simplifie là, mais le principe est juste), alors que le php s'exécute côté serveur, donc le contrôle est total...