Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > AJAX
AJAX Forum sur la programmation AJAX. Avant de poster : Cours AJAX, FAQ AJAX, Toutes les FAQ JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/08/2011, 10h42   #1
Candidat au titre de Membre du Club
 
Inscription : mars 2007
Messages : 52
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 52
Points : 11
Points : 11
Par défaut Tester l'existence d'un fichier distant

Bonjour, voilà je vous explique ma problématique :

Dans ma page test.php j'ai un form qui contient un bouton submit avec pour id "soumission" + 1 champ hidden avec pour id "nom_fichier"

J'aimerais écrire une fonction qui, sur l'évènement onclick du bouton submit, teste l'existence du nom de fichier (= la valeur de mon champ "nom_fichier") : si le fichier existe, j'ouvre une fenêtre pop up "traitement.php" pour la suite du traitement. Et si le fichier n'existe pas, je redirige ma page test.php vers erreur.php, et bien sûr, pas d'ouverture de ma fenêtre pop up "traitement.php".

Voilà l'ébauche de ma fonction :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
$(document).ready(function () {
    $("#soumission").click(function() {
        var nom_du_fichier= $('#nom_fichier').attr('value');
        if ((nom_du_fichier== "") || ) {
			...traitement redirect vers erreur.php blablabla;
	}
	else if (!verifExistence(nom_du_fichier)) {
			...traitement redirect vers erreur.php blablabla;
	}
	else {
			...traitement ouverture de traitement.php dans une fenêtre pop up;
	}		
        return false;
    });
});
Là où je bloque essentiellement, c'est sur la façon de tester à la volée l'existence de mon fichier, donc la création de ma fonction "verifExistence()". Ca fait appel à de l'AJAX mais là, je sèche.

merci beaucoup pour votre aide
@+
Marmotton76 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2011, 11h07   #2
Rédacteur/Modérateur
 
Avatar de andry.aime
 
Homme Andry Aimé
Inscription : septembre 2007
Messages : 5 128
Détails du profil
Informations personnelles :
Nom : Homme Andry Aimé
Localisation : Ile Maurice

Informations forums :
Inscription : septembre 2007
Messages : 5 128
Points : 7 269
Points : 7 269
Bonjour,

Dans la fonction ajax verifExistence(), lance la requête en mode synchrone.

A+.
andry.aime est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2011, 13h50   #3
Candidat au titre de Membre du Club
 
Inscription : mars 2007
Messages : 52
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 52
Points : 11
Points : 11
Je crois que j'ai un problème sur la façon de renseigner l'URL de mon fichier dans ma fonction :

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
27
 
$(document).ready(function () {
    $("#soumission").click(function() {
        var nom_du_fichier= $('#nom_fichier').attr('value');
        var url_du_fichier = '/mon_repertoire/'+nom_du_fichier;
        if ((nom_du_fichier== "") || ) {
	    document.location.href="erreur.php";
	}
	else {
	    xhr=getXhr();
	    xhr.open("HEAD", url_du_fichier, true);
	    xhr.onreadystatechange=function() 
                {
		    if(xhr.readyState == 4) {
			if(xhr.status == 200) { 
			    window.open(nom_du_fichier,'Mon titre','Mes options');
			}
			else {
			    document.location.href="erreur.php";
			}
		     }
		 }
		 xhr.send(null);
        }		
        return false;
    });
});
Le résultat : ça m'envoie systématiquement vers ma page d'erreur, alors que mon_fichier existe vraiment (il est situé dans un répertoire à la racine de mon fichier php qui lance ce script)
Ne serait-ce pas ma variable url_du_fichier qui est mal écrite (genre mauvais chemin) ? J'ai essayé une url absolue http..., j'ai aussi essayé d'ajouter ou d'enlever des slashes autour de mon nom de répertoire, mais rien n'y fait !

Merci @+
Marmotton76 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2011, 13h54   #4
Rédacteur/Modérateur
 
Avatar de andry.aime
 
Homme Andry Aimé
Inscription : septembre 2007
Messages : 5 128
Détails du profil
Informations personnelles :
Nom : Homme Andry Aimé
Localisation : Ile Maurice

Informations forums :
Inscription : septembre 2007
Messages : 5 128
Points : 7 269
Points : 7 269
Citation:
if ((nom_du_fichier== "") || )
andry.aime est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2011, 14h05   #5
Candidat au titre de Membre du Club
 
Inscription : mars 2007
Messages : 52
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 52
Points : 11
Points : 11
Non c'est pas ça. En fait j'ai "adapté" ma fonction pour les besoins du présent post, et j'ai oublié d'enlever les ||. Cette ligne est donc bonne...
Merci pour le coup d'oeil !

Citation:
Envoyé par andry.aime Voir le message
Marmotton76 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2011, 14h17   #6
Rédacteur/Modérateur
 
Avatar de andry.aime
 
Homme Andry Aimé
Inscription : septembre 2007
Messages : 5 128
Détails du profil
Informations personnelles :
Nom : Homme Andry Aimé
Localisation : Ile Maurice

Informations forums :
Inscription : septembre 2007
Messages : 5 128
Points : 7 269
Points : 7 269
Tu parles de cette partie
Citation:
if(xhr.readyState == 4) {
if(xhr.status == 200) {
window.open(nom_du_fichier,'Mon titre','Mes options');
}
else {
document.location.href="erreur.php";
}
}


Essaye avec
Code :
1
2
3
4
5
6
7
if(xhr.readyState == 4) {
			if(xhr.status == 200 || xhr.status==0) { 
			    window.open(nom_du_fichier,'Mon titre','Mes options');
			}
			else {
			    alert(xhr.status);
			}
Si c'est dans le if que j'ai remarqué, il faut qu'on regarde ton code HTML générer.

A+.
andry.aime est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2011, 14h29   #7
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 13 807
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 41
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2008
Messages : 13 807
Points : 35 797
Points : 35 797
Code :
var nom_du_fichier= $('#nom_fichier').attr('value');
c'est assez maladroit, il vaut mieux utiliser
Code :
var nom_du_fichier= $('#nom_fichier').val();
Sinon, pour tester l'existence du fichier, tu n'as qu'à faire une requête AJAX vers celui-ci, si tu reçois une erreur 404 en retour, c'est qu'il n'existe pas.
__________________
Pas de question technique par MP !
Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, contactez-moi !
Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
Mon livre sur jQuery
Bovino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2011, 14h56   #8
Candidat au titre de Membre du Club
 
Inscription : mars 2007
Messages : 52
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 52
Points : 11
Points : 11
C'est exactement ça ! Je gérais mal le résultat de 'status' et j'avais oublié qu'avec status=0 mon résultat était vrai aussi.

MERCI INFINIMENT

Et merci à Bovino pour ses conseils éclairés !

@+


Citation:
Envoyé par andry.aime Voir le message
Tu parles de cette partie



Essaye avec
Code :
1
2
3
4
5
6
7
if(xhr.readyState == 4) {
			if(xhr.status == 200 || xhr.status==0) { 
			    window.open(nom_du_fichier,'Mon titre','Mes options');
			}
			else {
			    alert(xhr.status);
			}
Si c'est dans le if que j'ai remarqué, il faut qu'on regarde ton code HTML générer.

A+.
Marmotton76 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h50.


 
 
 
 
Partenaires

Hébergement Web