Bonjour,
Je suis entrain de faire un petit plugin qui permet de detecter la présence d'un produit (utiliser lors du redémarrage de celui-ci).
Le principe est lorsque je lance la fonction, j'affiche une fenêtre modale pour dire de patienter et j’exécute des requêtes Ajax toutes les 3 secondes jusqu'a ce que le produit réponde : lorsque le produit répond, je ferme la fenetre.
Code du plugin :
=> La fonction $(..).modal(...) est un plugin de boostrap
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 (function($){ /********************************************************************/ // $infoWindow : fenetre modale qui est affichée pendant le chargement // url : addresse de la page a charger // success : function(data), fonction executée lors de la réception des données $.findProduct = function($infoWindow, url, success, options){ var defauts = { "timeout": 3000 }; var myOptions = $.extend(defauts, options); var $div = $infoWindow.find(".modal-body"); $infoWindow.find(".modal-header h3").text("Informations"); $div.empty().append($('<div class="alert">Produit en cours de redémarrage...</div>')); $infoWindow.find(".modal-footer button").addClass("hide"); $infoWindow.modal("show"); var $ajax = $.ajax({ url: url, dataType: "json", type: "GET", cache: false, timeout: myOptions.timeout, error: function(){ $.findProduct(this.$infoWindow, this.url, this.success, this.options); // => on relance la requete car produit non detecté // probleme : this.success est vide => pourquoi ? }, //data: postStr, context: {$infoWindow:$infoWindow, url:url, succes:success, options:options}, success: function(data){ this.succes(data); this.$infoWindow.modal("hide"); } }); return $ajax; }; })(jQuery);
Utilisation de la fonction :
Le problème est dans ce bout de code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 $.findProduct( $("#myWindow"), // fenetre affichée lors du traitement "file.json", function(data){ alert("produit redemarré ! "); // message affiché lorsque la connexion a réussie } );
=> a priori this.success est vide, je ne peux donc pas relancer la fonction avec les même paramètre (il y a un truc que j'ai du mal comprendre à propos de l'utilisation de la propriété "context")
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 error: function(){ $.findProduct(this.$infoWindow, this.url, this.success, this.options); // => on relance la requete car produit non detecté // probleme : this.success est vide => pourquoi ? },
=> aussi, comment faire pour pouvoir interrompre le système ?
Merci d'avance,
Partager