Bonjour,

Je n'arrive pas à me dépatouiller de ce problème :
- j'utilise ajax pour vérifier si un fichier a été téléchargé en appelant une page php.
- les requêtes fonctionnent bien et renvoient : 'En cours' si le fichier n'est pas encore uploadé, 'Fichier téléchargé avec succès' en cas de réussite, et un message d'erreur en cas de problème.
- La console Firebug montre que la requête me renvoie bien 'Fichier téléchargé avec succès', que ce soit en mode synchrone ou asynchrone.
- En mode synchrone, mon script fonctionne, mais en mode asynchrone, ma variable 'step_response' sensée recevoir cette réponse reste bloquée en undefined.

Code javascript : 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
// Timer de récupération de la réponse à l'upload du fichier
timer_upload = setInterval(
    function () {
        if (step == 2) {
            switch (step_response) {
 
                case undefined:
                    break;
 
                case 'En cours' :                    
                    alert('en cours');
                    step_response = ajax(
                        'GET',
                        'index.php',
                        'action=admin:import:upload_status',
                        false
                    );
                    break;
 
                case 'Fichier téléchargé avec succès' :
                    alert('téléchargé');
                    // insertion dans table import
                    step_next = true ;
                    // Arrêt du timer_upload
                    clearInterval(timer_upload);
                    break;
 
                default :
                    // erreur
                    step = 0;
                    // Arrêt du timer_upload
                    clearInterval(timer_upload);
                    break;
            }
        }
    },
    500
);

Voici mon script pour AJAX :
Code javascript : 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
// XHR.js
 
//==============================================================================
 
function getXHR () {
    var xhr = null;
    // IE 7 et supérieur, autres navigateurs
    if (window.XMLHttpRequest) xhr = new XMLHttpRequest();
    // IE 6 et inférieur
    else if (window.ActiveXObject) {
        try { xhr = new ActiveXObject("Msxml2.XMLHTTP") }
        catch (exception1) {
            try { xhr = new ActiveXObject("Microsoft.XMLHTTP") }
            catch (exception2) {}
        }
    }
    // Erreur ou navigateur non pris en charge
    if (xhr == null)
        alert ("Une erreur s'est produite : "+
        	   "AJAX n'est peut-être pas pris en charge par votre navigateur");
    // Renvoi de l'objet
    return xhr;
}
 
//==============================================================================
/*
 Fontion ajax() :
  - Instancie un objet XMLHttpRequest
  - Envoie une requete GET ou POST
  - Retourne XMLHttpRequest.responseText
 Arguments :
  - method : 'GET' ou 'POST'
  - url : URL du fichier à appeler
  - param : paramètres éventuels
  - async : TRUE par défaut, pour mode asynchrone
  - content_type : 'application/x-www-form-urlencoded' par défaut, 'data' ou
    'multipart/form-data' à préciser pour l'envoi de données non ASCII, binaires
    ou de grandes tailles
*/
 
function ajax(
        method, url, param = null,
        async = true,
        content_type = "application/x-www-form-urlencoded") {   
    // Objet XMLHttpRequest
    var xhr = getXHR();    
    // Configuration selon méthode GET ou POST 
    if (method.toUpperCase() == "GET") {
        // GET
        if (param != null) url = url + "?" + param;
        xhr.open('GET',url,async); // 'true' pour mode asynchrone
    }
	else {
        // POST
        xhr.open('POST',url,async); // 'true' pour mode asynchrone
        if (content_type == 'data') {
                content_type = 'multipart/form-data';  
        }
        xhr.setRequestHeader("Content-Type",content_type);
    }
    // Envoi
    xhr.send(param);
    // Réception
    if (async) {
        xhr.onReadyStateChange = function () {
            if ( readyState == 4) {
                return get_responseText(xhr);
	        }
        }
	}
    else {
        return get_responseText(xhr);
    }
}
 
//==============================================================================
 
function get_responseText(xhr) {
	if (xhr.status == 200) return xhr.responseText;
	else return 'Erreur';
}

Merci d'avance pour votre aide !