Retourner le résultat AJAX avec CALLBACK
Bonjour à tous,
Merci à tous ceux qui pourront me dire pourquoi le traitement avec le CALLBACK ne fonctionne pas avec AJAX !!!:P
Ma fonction appelante
Code:
1 2 3 4 5 6
| function initFormulaire()
{ var urlParam = extractUrlParams(); // Extrait les données passées dans l'URL => Ok
var jsonData = {};
jsonData = getInfoFormulaire (urlParam["id"]);// Retourne des données d'une base de données au format JSON => Erreur
addListBox(jsonData);
} |
La fonction qui pose problème est getInfoFormulaire :mur: car ne renvoie pas l'objet JSON attendu. Il est VIDE :furieux:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| function getInfoFormulaire(pIdUser,callback)
{ try
{ var serialData ={};//déclaration d'un objet
serialData.id= pIdUser;
var jsonDataReturn = {};
$.ajax
( { type: "POST",
url: "formulaireDB.php",
data: serialData ,
dataType: "json",
success: function(dataSQL, statut)
{ jsonDataReturn = callback(dataSQL);//========>VOIR CI DESSOUS LA DESCRIPTION DE L'ERREUR
},
error: function(dataSQL, statut)
{ alert ("error sqlConnect.js : " + dataSQL.erreur);
}
}
);
}
catch (e)
{ alert ('An error has occurred: '+ e.message);
}
return jsonDataReturn;
}
} |
Voici la description de l'erreur
Citation:
Uncaught TypeError: undefined is not a function formulaire.js:
39$.ajax.success formulaire.js:
39b.Callbacks.c jquery-1.9.1.min.js:
3b.Callbacks.p.fireWith jquery-1.9.1.min.js:
3k jquery-1.9.1.min.js:
5b.ajaxTransport.send.r
Encore une fois merci pour votre aide :bravo:
JQuery = asynchrone => architecture un peu différente
Après une intense réflexion sur la problématique inhérente à l'asynchronisme AJAX, il faut effectivement penser l'architecture un peu différemment.
Il ne faut pas faire un appel à $.ajax avec return mais faire appel aux fonctions dans la boucle de traitement $.ajax (error, success, complete).
Donc exit
Code:
1 2
| jsonData = getInfoFormulaire (urlParam["id"]);
addListBox(jsonData); |
Pour
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| function initFormulaire()
{ var urlParam = extractUrlParams(); // Extrait les données passées dans l'URL => Ok
getInfoFormulaire (urlParam["id"]);// Retourne des données d'une base de données au format JSON => Erreur
addListBox(jsonData);
}
function getInfoFormulaire(pIdUser)
{ try
{ var serialData ={};//déclaration d'un objet
serialData.id= pIdUser;
var jsonDataReturn = {};
$.ajax
( { type: "POST",
url: "formulaireDB.php",
data: serialData ,
dataType: "json",
success: function(dataSQL, statut)
{ addListBox(dataSQL);//========>Appeler quand traitement asynchrone fini
},
error: function(dataSQL, statut)
{ alert ("error sqlConnect.js : " + dataSQL.erreur);
}
}
);
} // ....
} |
Bon par contre dois tester si peux appeler addListBox directement ou dois l'envoyer dans la fonction getInfoFormulaire en paramètre comme ça getInfoFormulaire(param, addListBox)Je teste et espère que c'est bien la solution.
To be continued... :whistle: