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 :
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);
=> La fonction $(..).modal(...) est un plugin de boostrap

Utilisation de la fonction :
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
	}
);
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
 
            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 ?
            },
=> 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")
=> aussi, comment faire pour pouvoir interrompre le système ?


Merci d'avance,