Bonjour,
j'ai un problème avec mon code, je valide un formulaire dans une fenêtre modale, cela marche avec un retour html, mais quand je change pour un retour json, au lieu d'executer le code de la fonction sucess, cela affiche simplement le echo jsonencode dans la page (faisant ainsi la redirection), je pense donc à une erreur dans le script mais je ne vois pas laquelle
script js
$(document).on('submit', '#reinitialiser', function(event){
event.preventDefault();
var form = $('#reinitialiser');
var nni = $('#login').val();
var mail = $('#mail').val();
$.ajax({
url: form.attr('action'),
type: form.attr('method'),
data : form.serialize(),
datatype: 'json', //JSON
success:function(json){
if (json.reponse ==='ok'){
console.log(json);
alert('ok');
else {
alert('erreur :' + json.reponse);
}
}
};
});
script php
<?php
if ((isset($_POST['login'])) && (isset($_POST['mail']))) {
if ((!empty($_POST['login'])) && (!empty($_POST['mail']))) {
$reponse ='ok';
}
echo json_encode(['reponse' => $reponse]);
}
?>
Essaye ce code en javascript
$(document).ready(function () {
$('#reinitialiser').submit(function (e) {
e.preventDefault();
$.ajax({
url: 'data.php',
type: 'POST',
data : $(this).serialize(),
dataType: 'json', //JSON
success:function(json){
console.log(json);
if (json.reponse ==='ok'){
console.log(json);
alert('ok');
} else {
alert('erreur :' + json.reponse);
}
}
})
})
});
Bonjour.
Pour commencer, remplaces :
if ((isset($_POST['login'])) && (isset($_POST['mail']))) {
if ((!empty($_POST['login'])) && (!empty($_POST['mail']))) {
Par :
if (isset($_POST['login']) && isset($_POST['mail'])) {
if (!empty($_POST['login']) && !empty($_POST['mail'])) {
Ensuite, pour éviter que le reste de ton code/page php ne s'exécute, après ton echo fais par exemple un die();
.
Donc au final :
if (isset($_POST['login']) && isset($_POST['mail'])) {
if (!empty($_POST['login']) && !empty($_POST['mail'])) {
$reponse = 'ok';
}
/* Suite du code */
} else {
/* Encore du code */
}
echo json_encode(['reponse' => $reponse]);
die();
dans les deux cas , cela ne change pas le fait que la page se redirige vers la page du contrôleur en affichant le echo {"reponse":"ok"}
et ne passe pas dans la fonction succes (a mon avis) car je n'ai aucune alerte ou log dans la console
voici le code de ma fenêtre modale contenant le formulaire:
<center>
<div class="modal-header ">
<button type="button" class="close" data-dismiss="modal">x</button>
<h4 class="modal-title">Réinitialiser le mot de passe</h4>
</div>
<div class="modal-body">
<form id="reinitialiser" method="post" action="Controler/controler_reinitialisation_mot_de_passe.php">
<div class="clearfix">
<div class="form-group">
<label for="Login" > NNI : </label>
<input type="text" name="login" id="login" placeholder="NNI" required>
</div>
</div>
<div class="clearfix">
<div class="form-group">
<label for="mail" > Mail : </label>
<input text name="mail" id="mail" placeholder="Mail" required />
</div>
</div>
<button type="submit" class="btn btn-primary">Envoyer</button>
</form>
</div>
<div class="modal-footer">
<button class="btn btn-info" data-dismiss="modal">Annuler</button>
</div>
</center>
<script src="JQuery/jquery.js"></script>
<script src="javascript/app.js"></script>
Quand tu parles de redirection, tu veux dire qu'il y a rechargement de la page ?
Nous montres-tu tout le code de la page de traitement en PHP ?
S'il y a une redirection c'est qu'il y a deux possibilités :
je remet donc l'ensemble des éléments tel que j'ai le problème (sans tenir compte des premières solutions du coup)
le app.js :
$(document).on('submit', '#reinitialiser', function(event){
event.preventDefault();
var form = $('#reinitialiser');
var nni = $('#login').val();
var mail = $('#mail').val();
$.ajax({
url: form.attr('action'),
type: form.attr('method'),
data : form.serialize(),
datatype: 'json',
success:function(json){
if (json.reponse ==='ok'){
console.log(json);
alert('ok');
else {
alert('erreur :' + json.reponse);
}
}
};
});
le html
<center>
<div class="modal-header ">
<button type="button" class="close" data-dismiss="modal">x</button>
<h4 class="modal-title">Réinitialiser le mot de passe</h4>
</div>
<div class="modal-body">
<form id="reinitialiser" method="post" action="Controler/controler_reinitialisation_mot_de_passe.php">
<div class="clearfix">
<div class="form-group">
<label for="Login" > NNI : </label>
<input type="text" name="login" id="login" placeholder="NNI" required>
</div>
</div>
<div class="clearfix">
<div class="form-group">
<label for="mail" > Mail : </label>
<input text name="mail" id="mail" placeholder="Mail" required />
</div>
</div>
<button type="submit" class="btn btn-primary">Envoyer</button>
</form>
</div>
<div class="modal-footer">
<button class="btn btn-info" data-dismiss="modal">Annuler</button>
</div>
</center>
<script src="JQuery/jquery.js"></script>
<script src="javascript/app.js"></script>
le php
<?php
if ((isset($_POST['login'])) && (isset($_POST['mail']))) {
if ((!empty($_POST['login'])) && (!empty($_POST['mail']))) {
$reponse ='ok';
}
echo json_encode(['reponse' => $reponse]);
}
?>
Est-ce que qd tu remplaces ton javascript avec le mien ça ne marche pas ?
Je l'ai testé et ça marche avec le même code php que t'as mis
En effet, avec ton code js, cela fonctionne, du coup, quelle est la grande différence entre les deux? à part la différence de déclaration de la fonction?
là du coup, une fois que je clique sur le bouton submit,, le script s'execute et me renvoit en json le l'élément reponse qui vaut ok , validant donc la déclaration json.reponse==='ok'
au niveau reseau et console, je n'ai aucune erreur, la console m'affiche bien le contenu de l'objet json et le reseau me montre bien la requete post en code 200
Dans son code javascript, l'une des choses les plus importantes, il fait en sorte que la page soit totalement chargée, ce qui fait qu'en premier lieu tous les fichiers javascripts sont bien chargés et prit en compte.
En tout cas, merci bien à tous les deux pour cette aide sur le sujet^^ ca me faisais un peu craquer a force