IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

[AJAX] champ select verifiant en live si un fichier existe


Sujet :

JavaScript

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 94
    Points : 55
    Points
    55
    Par défaut [AJAX] champ select verifiant en live si un fichier existe
    Bonjour tout le monde !!

    j'ai un champ select d'un formulaire contenant le nom de differentes applications. J'aimerais que lorsqu'on selectionne une des applis il verifie en live ( ajax ) si le fichier correspondant existe !!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    echo "<form id='myForm' action='app.php' method='POST'>";
    	echo "Appli : ";
    	echo "<select name='app' onchange='doSomething()'>";
    		echo "<option>app1</option>";
    		echo "<option>app2</option>";
    	echo "</select>";
    	echo "<br class='clearAll' /><br />";
    	echo "<br /><input type='submit' value='Valider' />";
    echo "</form>";
    echo "<div id='signalEvent'>&nbsp;</div>";
    voilà l'exemple... si je sélectionne "app1", il doit vérifier si "app1.txt" existe et si non m'afficher dans le div "signalEvent" une phrase du style "Le fichier n'existe pas" (peu importe...c'est le principe...) !!

    je vous ferai pas perdre de temps à vous coller la doSomething() que j'ai essayer de faire, c'est n'importe quoi... j'arrive à rien

    Merci pour votre aide

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2007
    Messages : 247
    Points : 276
    Points
    276
    Par défaut
    slt,

    je présuppose que tes fichiers txt sont regroupés dans un même rep. tu crées un fichier php contenant un script listant l'ensemble des fichiers txt du dit répertoire et vérifiant donc si ton fichier existe ou non...
    ton script renverra au navigateur "OK" si le fichier existe et "Error" dans le cas contraire...

    sauf que c'est ajax qui va questionner le script... dans la fonction callback tu testes responseText : si "OK" tu fais ce que tu veux, si "Error" tu affiches la phrase dans ton div...

    La réponse te suffit pour chercher ton code ? ou tu veux du code ??
    Conception et hébergement de votre site Web : http://www.jvprod.fr !

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 94
    Points : 55
    Points
    55
    Par défaut
    ok j'étais pas parti dans ce sens... j'essayais de tester l'existence du fichier directement en JS... :/

    effectivement un bout de code me serait très utile si ça te saoule pas trop

    merci

  4. #4
    Membre régulier Avatar de SpecialCharacter
    Inscrit en
    Mai 2007
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 73
    Points : 72
    Points
    72
    Par défaut Solution javascript
    Une solution avec l'objet XMLHttpRequest est possible (je ne dis pas Ajax pour les puristes)
    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
     
    function getXHR()
    {
    	xHR = null;
    	if (window.XMLHttpRequest)
    	{
    		xHR = new XMLHttpRequest();
    	}
    	else if (window.ActiveXObject)
    	{
    		try
    		{
    			xHR = new ActiveXObject("Msxml2.XMLHTTP");
    		}
    		catch (e)
    		{
    			xHR = new ActiveXObject("Microsoft.XMLHTTP");
    		}
    	}
    	else
    	{
    		alert("Votre navigateur ne supporte pas la classe XMLHttpRequest.");
    		xHR = false;
    	}
    	return xHR;
    }
    function testFichier(fichier)
    {
    	xHR = getXHR();
    	try {
    		xHR.open("GET", fichier + ".txt", true);
    		xHR.send(null);
    	}
    	catch (e)
    	{
    		if (e.name == "NS_ERROR_FILE_NOT_FOUND")
    		{
    			xHR.abort();
    			document.getElementById("div_de_diagnostique").innerHTML = "Le fichier \"" + fichier + "\" n'existe pas.";
    		}
    	}
    }
    Ici, on met le troisième argument de la méthode open() à true dans le but d'avoir un connexion asynchrone, car la méthode abort() n'est pas executable pour les connexions synchrones.

    On effectue un try car le fait de faire un open d'un fichier non existant génére une exception qu'on capture. Si le nom de cette exception est celle d'un fichier non trouvé, on annule la requête puis signale l'absence du fichier.

    ...pour plus d'informations http://www.w3.org/TR/XMLHttpRequest

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 94
    Points : 55
    Points
    55
    Par défaut
    Merci pour ta soluce SpecialCharacter

    Bon j'ai un peu adapter/modifier ton code et j'ai encore un ptit soucis :/

    en fait les fichiers txt dont je veux tester l'existence sont sur le réseau à une adresse du style \\10.39.251.254\prod\RESULTATS\

    J'arrive à faire le test en local directement sur le serveur mais il me répond qu'il ne trouve pas le fichier si je lui mets

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    url = "\\\\10.39.251.254\\prod_fg3\\RESULTATS\\" + url;
    xhr.open("HEAD", url, true);
    Bon "url" est le nom du dit fichier donc url = \\\\10.39.251.254\\prod_fg3\\RESULTATS\\fichier.txt

    "open" en JS ne peut-il pas ouvrir de fichier sur le réseau ??

    comment puis-je faire si c'est le cas ?

    edit : En fait j'arrive en local et également via une adresse web... seul soucis mes fichiers ne sont accessibles que par partage samba :/

    Merci

  6. #6
    Membre habitué
    Inscrit en
    Septembre 2007
    Messages
    169
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 169
    Points : 149
    Points
    149
    Par défaut
    Je pense que c'est parceque XMLHttpRequest ne marche pas sur des fichiers d'un autre site, et donc sur ton réseau vu que c'est sur une autre machine, le meme probleme se pose.
    Sinon la solution du fichier php reste possible.
    Cartes Pokémon, Yugioh, Magic ?
    Communauté d'échange

  7. #7
    Membre régulier Avatar de SpecialCharacter
    Inscrit en
    Mai 2007
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 73
    Points : 72
    Points
    72
    Par défaut
    Bonsoir,

    En effet, comme le stipule les différents mots inclus dans le nom de la classe XMLHttpRequest, cet objet ne sait manipuler que le protocole http, hors l'utilisation d'un fichier réseau (ouverture, écriture, etc.) n'est pas effectuable en http, surtout par un URL type \\xzy\123.

    Tu peux, le cas échéant, connecter un lecteur réseau via ton poste de travail ce qui permettrait de leurrer le système en faisant croire que c'est un fichier local, hormis cela, la solution est possible comme-dit par les autres utilisateurs

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2007
    Messages : 247
    Points : 276
    Points
    276
    Par défaut
    ton form modifié :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    echo "<form id='myForm' action='app.php' method='POST'>";
    	echo "Appli : ";
    	echo "<select name='app' id='app' onchange='doSomething()'>";
    		echo "<option value='app1'>app1</option>";
    		echo "<option value='app2'>app2</option>";
    	echo "</select>";
    	echo "<br class='clearAll' /><br />";
    	echo "<br /><input type='submit' value='Valider' />";
    echo "</form>";
    echo "<div id='signalEvent'>&nbsp;</div>";
    au préalable tu auras déclaré dans l'ordre :
    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
    <script type="text/javascript">
    function XHR(){
    try{ return new ActiveXObject("Microsoft.XMLHTTP");}
    catch(e){ try{ return new ActiveXObject("Msxml2.XMLHTTP");}
    catch(e){ try{ return new XMLHttpRequest();}
    catch(e){ returne false;}
    }
    }
    }
     
    function doSomething(){
    var objXHR = false;
    var objXHR = new XHR();
     
    file = document.getElementById("app").value+".txt";
     
    objXHR.onreadystatechange = function(){
    if(objXHR.readyState == 4){
    if(objXHR.status == 200){
    if(objXHR.responseText == "OK"){ //action si le fichier existe}
    if objXHR.responseText == "Error"){ //action si le fichier n'existe pas}
    }
    }
    }
     
    objXHR.open('GET','fichiersExistants.php?fichier='+file,true);
    objXHR.send(null);
    }
    </script>
    et ton fichier "fichiersExistants.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
    $dir = ""; //chemin d'accès au répertoire où se situent les fichiers txt
     
    $test = is_file($dir.$fichier);
     
    if($test == true) echo "OK";
    else echo "Error";
    ?>

    voilà, c'est du vite fait, donc il faut vérifier quand même...
    Conception et hébergement de votre site Web : http://www.jvprod.fr !

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 94
    Points : 55
    Points
    55
    Par défaut
    super !!

    j'ai adapté un peu et tout fonctionne

    je recolle le code du script vu que ya 2 ptites erreurs d'inattention

    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
     
    <script type="text/javascript">
    function XHR(){
    try{ return new ActiveXObject("Microsoft.XMLHTTP");}
    catch(e){ try{ return new ActiveXObject("Msxml2.XMLHTTP");}
    catch(e){ try{ return new XMLHttpRequest();}
    catch(e){ return false;}
    }
    }
    }
     
    function doSomething(){
    var objXHR = false;
    var objXHR = new XHR();
     
    file = document.getElementById("app").value+".txt";
     
    objXHR.onreadystatechange = function(){
    if(objXHR.readyState == 4){
    if(objXHR.status == 200){
    if(objXHR.responseText == "OK"){ } //action si le fichier existe
    if(objXHR.responseText == "Error"){ } //action si le fichier n'existe pas
    }
    }
    }
     
    objXHR.open('GET','fichiersExistants.php?fichier='+file,true);
    objXHR.send(null);
    }
    </script>
    Merci encore à tous pour votre aide !!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [2.x] Remplir dynamiquement un champ select avec ajax
    Par paquito dans le forum Symfony
    Réponses: 11
    Dernier message: 31/01/2014, 19h20
  2. Réponses: 3
    Dernier message: 26/10/2010, 09h27
  3. champ select verifiant en live si un fichier existe
    Par amans dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 09/11/2007, 15h01
  4. [MySQL] Pb d'insertion d'une valeur de champ select dans une Bdd
    Par Mimisator dans le forum PHP & Base de données
    Réponses: 20
    Dernier message: 20/10/2005, 18h51
  5. Personnalisation d'un champ select : modifier la fleche
    Par teshub dans le forum Balisage (X)HTML et validation W3C
    Réponses: 12
    Dernier message: 05/09/2005, 15h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo