Bonjour,
Je débute dans l'apprentissage du web. Je souhaite étudier l'achitecture REST qui me permet de faire le lien entre une application côté client en JS et un serveur web. Sur mon serveur, j'ai une partie controleur, modele, et persistance qui gere mes personnes. Je souhaite donc réaliser ma partie côté client.
Je souhaite afficher un simple tableau à partir d'une base de données, pouvoir afficher, ajouter, modifier, supprimer une personne. Seulement voilà, lorsque j'affiche ma page html, et que je souhaite afficher mon tableau rien ne se passe
Je ne vois pas où est mon erreur, ai-je oublié quelque chose?
Controleur :
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
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
27
28
29
30
31
32
33
34
35 <?php class Controleur { function __construct() { try{ $action=$_REQUEST['action']; switch($action){ case "get": $modele = DataAccessLayer::getPersonneModel($_REQUEST['id']); echo json_encode($modele); break; case "post": $modele = DataAccessLayer::postPersonne(array("nom" => utf8_decode($_REQUEST["nom"]), "prenom" => utf8_decode($_REQUEST["prenom"]))); echo json_encode($modele); break; case "put": $modele = DataAccessLayer::postPersonne(array("id" => $_REQUEST['id'], "nom" => utf8_decode($_REQUEST["nom"]), "prenom" => utf8_decode($_REQUEST["prenom"]))); echo json_encode($modele); break; case "delete": $modele = DataAccessLayer::deletePersonne($_REQUEST['id']); echo json_encode($modele); break; default: // L'action est incorrecte (non pr�vue) $modele = ModelCollectionPersonnes::getErrorModel("action", "Action non d�finie"); echo json_encode($modele); break; } } catch (Exception $e){ $modele = ModelCollectionPersonnes::getErrorModel("Exception", $e->getMessage()); echo json_encode($modele); } } } ?>
mon api permettant d'afficher le tableau :
Code html : Sélectionner tout - Visualiser dans une fenêtre à part
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47 <!DOCTYPE html> <!-- To change this license header, choose License Headers in Project Properties. To change this template file, choose Tools | Templates and open the template in the editor. --> <html> <head> <title>Tableau des Personnes</title> <script src="./jquery-1.11.2.min.js"></script> <script src="./views.js"></script> <script src="./EventController.js"></script> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> </head> <body> <h1> Tableau des Personnes </h1> <button id="displayTable">Afficher le tableau </button> <p id="errorMsgParagraph"></p> <table> <thead> <tr><th>Prénom</th><th>Nom</th><th></th><th></th></tr> </thead> <tbody id="outputTBody"> </tbody> </table> <script> var clickCallback = function(){ var ctrl = new Controller($( this ).prop("nodeName"), $( this ).attr("id"),"click"); ctrl.fireEvent(); } $( "#displayTable" ).bind("click",clickCallback); var changeCallback = function(){ var ctrl = new Controller($( this ).prop("nodeName"),$( this ).attr("id"),"change"); ctrl.fireEvent(); } </script> </body> </html>
Mon controleur js :
La vue côté js :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93 function Controller(tagName, idElement, eventType){ this.tagName = tagName; this.idElement = idElement; this.eventType = eventType; } Controller.prototype.toString = function(){ return "Element : " + this.tagName + ", ID :" + this.idElement + ", Type d'évenement : "+ this.eventType; } Controller.prototype.fireEvent = function(){ switch (this.eventType){ case "click" : this.onClick(); break; case "change": this.onChange(); break; default : alert("Evenement non défini"); } } Controller.prototype.onClick = function(){ switch (this.idElement){ case "displayTable" : this.executeRequest({action : "get"}); break; case "ajouter_new" : case "retablir_as_new" : this.executeRequest({action : "post", nom : $( "#nom_new" ).val(), prenom : $( "#prenom_new" ).val() }); break; default : var idElementParts = this.idElement.split('_'); methode = idElementParts[0]; idPersonne = idElementParts[1]; this.executeRequest({action: idElementParts[0], id : idElementParts[1]}); } } Controller.prototype.onChange = function(){ var idElementParts = this.idElement.split('_'); idPersonne = idElementParts[1]; this.executeRequest({action : "put", id : idElementParts[1], nom : $( "#nom_"+idPersonne ).val(), prenom : $( "#prenom_"+idPersonne ).val() }); } Controller.prototype.executeRequest = function(parametersObject){ switch (parametersObject.action){ case "delete" : callbackFunction = generateViewDeleteSingle; break; case "post" : callbackFunction = generateViewGetPostPutSingle; break; case "put" : callbackFunction = generateViewDoNothing; break; case "get" : if (parametersObject.id != null){ callbackFunction = generateViewGetPostPutSingle; } else{ callbackFunction = generateViewGetMultiple; } break; } jqxhr = $.ajax({dataType : "json", url : "http://localhost:8000/", // J'ai un gros doute sur l'url method : 'post', contentType : 'application/x-www-form-urlencoded', data : parametersObject, success : callbackFunction }); jqxhr.fail(function(){ $( "#outputParagraph" ).append("Erreur : échec de la requête getJSON"); }); }
Merci beaucoup de votre aide, je suis desespéré..
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92 function generateViewDoNothing(retrievedData){ } function generateViewDeleteSingle(retrievedData){ if(retrievedData["error"] != null){ for(var errorType in retrievedDate["error"]){ $( "#errorMsgParagaph" ).append("Une erreur de type " + errorType + "s'est produite : "+ retrievedData["error"][errorType]); } } else{ $ ( "#outputTBody" ).empty(); for(var key in retrievedData['data']){ personne = retrievedData['data'][key]; $( "#outputTBody ").append('<tr>' + '<td><input id="prenom_new" value="' + personne['prenom']+'"/></td>' +'<td><input id="nom_new" value="'+personne['nom']+'"/></td>' +"<td>Supprimé</td>" +'<td><button id="retablir_as_new">Rétablir</button></td>' +'</tr>'); $( "#retablir_as_new" ).bind("click", clickCallback); } } } function generateViewGetPostPutSingle(retrievedData){ if(retrievedData["error"] != null){ for(var errorType in retrievedData["error"]){ $ ( "#errorMsgParagraph" ).append("Une erreur de type "+errorType+"s'est produite : "+retrievedData["error"][errorType]); } } else { $( "#outputTBody" ).empty(); for(var key in retrievedData['data']){ personne = retrievedData['data'][key]; $( "#outputTBody" ).append('<tr>' +'<td><input id="prenom_'+personne['id']+'" value="'+personne['prenom']+'"/></td>' +'<td><input id="nom_'+personne['id']+'" value="'+personne['nom']+'"/></td>' +'<td>ID : '+personne['id'].substring(0,5)+'...</td>' +'<td><button id="'+'delete_'+personne['id']+'">Supprimer</button></td>' +'</tr>'); $( "#delete_"+personne['id'] ).bind("click",clickCallback); $( "#get_"+personne['id'] ).bind("click",clickCallback); $( "#nom_"+personne['id'] ).bind("change",changeCallback); $( "#prenom_"+personne['id'] ).bind("change",changeCallback); } } } function generateViewGetMultiple(retrievedData){ if(retrievedData["error"] != null){ for (var errorType in retrievedData["error"]){ $( "#errorMsgParagraph" ).append("Une erreur de type "+errorType+"s'est produite : "+retrievedData["error"][errorType]); } } else{ $( "#outputTBody" ).empty(); $( "#outputTBody" ).append('<tr>' +'<td><input id="prenom_new" value="" /></td>' +'<td><input id="nom_new" value="" /></td>' +'<td><button id="ajouter_new">Ajouter</button></td>' +"<td></td>"+'</tr>'); $( "#ajouter_new" ).bind("click", clickCallback); for (var key in retrievedData['data']){ personne = retrievedData['data'][key]; $( "#outoutTBody").append('<tr>' +'<td><input id="prenom_' + personne['id']+ '" value="' + personne['prenom'] + '"/></td>' +'<td><input id="nom_' + personne['id'] + '" value="'+personne['nom']+'"/></td>' +'<td><button id="'+'delete_'+personne['id']+'">Supprime</button></td>' +'<td><button id="'+'get_'+personne['id']+'">Voir Détails</button></td></tr>' +'</tr>'); $( "#delete_"+personne['id']).bind("click",clickCallback); $( "#get_"+personne['id']).bind("click",clickCallback); $( "#nom_"+personne['id'] ).bind("click",clickCallback); $( "#prenom_"+personne['id'] ).bind("click",clickCallback); } } }
-------------------------------------------
EDIT : Il me semble que ça vient de la requête AJAX en fin du controleur JS car je n'arrive pas à rentrer dans la fonction generateViewGetMultiple dans la vue..
Merci beaucoup
Partager