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/js InnerHTML affichage image


Sujet :

JavaScript

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 10
    Par défaut Ajax/js InnerHTML affichage image
    hello voici un des deux problèmes que je n'arrive pas à résoudre.
    pas mal cherché avant de vous solliciter mais mes compétences en ce qui concerne le javascript étant limitées, je n'ai pas reussi à solutionner mes problèmes dont l'un suit :



    ce script fait partie d un script d upload de fichier.

    on a donc un input avec un bouton parcourir, une fois le fichier sélectionné, l'input et bouton parcourir disparaissent pour laisser place au message 'Envoi en cours"

    bref cette étape correspond à la partie ci dessous en vert.

    je souhaiterais pouvoir ajouter une image (ajax_loader.gif // barre de progression en gif) a coté du texte 'Envoi en cours'.
    Mais impossible d'intégrer cela, cela fait bugguer le script a chaque fois :s

    si quelqu'un à une idée/solution, je suis plus que preneur ...

    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
    <?php
     
    // Le futur contenu
    $content = array();
     
    // Si la variable d'action est transmise et si le type coincide, alors on crée un nouveau input
    if( isset($_GET['action']) && $_GET['action'] == 'add_file_input' )
    {
     $mTime = time();
     // On crée la zone qui va contenir le formulaire du fichier à envoyer
     $content[] = '<div style="font-family:verdana;font-size:0.8em;border:1px;padding:4px;margin:0px;" id="file_status_'.$mTime.'">';
     // Puis le formulaire en lui même
     $content[] = '<form name="file_'.$mTime.'" method="post" action="alt_index_upload.php" target="alt_index_upload" enctype="multipart/form-data">';
     // On crée un champ caché qui contient le nom de la zone dans laquelle afficher les informations sur l'état du transfert
     $content[] = '<input type="hidden" name="htmlElement" value="file_status_'.$mTime.'"/>';
     // Lorsqu'un fichier est selectionné dans la liste, il est envoyé au serveur automatiquement en arrière plane et l'utilisateur en est informé
    $content[] = '<input type="file" name="fichier" onChange="document.file_'.$mTime.'.submit();document.getElementById(\'file_status_'.$mTime.'\').innerHTML=\'Envoi en cours\';">';
     $content[] = '</form>';
     $content[] = '</div>';
    }
     
    echo utf8_encode( implode(chr(10),$content) );
     
     
    ?>

  2. #2
    Membre Expert
    Avatar de gwyohm
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2007
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 925
    Par défaut
    Bonjour et bienvenue sur le forum,

    Je ne comprends pas trop où se situe ton problème... le code que tu donnes est du PHP, et d'après ton message, c'est dans le javascript que tu as des soucis. Mais on en a pas une ligne !

    Sache quand même qu'il n'est pas possible de soumettre des champs file en Ajax (il faut passer par une iframe cachée) et que de toutes facons, AJAX ne te permettrai pas d'afficher une barre de progression pour informer du pourcentage de traitement...

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 10
    Par défaut
    hello gwyohm, merci pour ton aide a nouveau.

    oui je sais qu'on ne peut afficher de barre de progression, la du coup je souhaiterais qu'apparaisse avant le "envoi en cours" une image genre celle ci :


    ça donnera un effet de chargement plutot.

    pour la soumission du champ file, effectivement cela tourne dans une iframe. je n ai indiqué ici qu une partie du script.

    pour la partie en javascript dans le script php c'est la suivante (que j avais coloré en vert)

    on a l'input nommé fichier qui une fois qu on a parcouru et sélectionné le fichier (action onchange), envoie le fichier sur le serveur et remplace dans la page le champ input+bouton submit par le texte "envoi en cours"


    $content[] = '<input type="file" name="fichier" onChange="document.file_'.$mTime.'.submit();document.getElementById(\'file_status_'.$mTime.'\').innerHTML=\'Envoi en cours\';">';

  4. #4
    Membre Expert
    Avatar de gwyohm
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2007
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 925
    Par défaut
    Plutot que le script php, il serait plus utile de voir le HTML généré.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 10
    Par défaut
    voici le html généré :

    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
    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
    82
    <html>
    <head>
    	<script language="javascript">
    	var formInputs = new Array();
    	var xhrObject = new Array();
    
    	function ajax_call_multi( fichier, id, sync, addContent, xhrCount )
    	{
    		// Initilisation de xhr_count si nécessaire
    		if( !xhrCount )
    			xhrCount = 0;
    		// Initialisation de la variable d'état d'ajout de contenu
    		if( !addContent )
    			addContent = 0;
    
                            // Si le navigateur est Firefox, on crée l'objet XMLHttpRequest propre à firefox (fonctionne aussi avec Opera/Netscape)
    		if( window.XMLHttpRequest )
    			xhrObject[xhrCount] = new XMLHttpRequest();
    		else if( window.ActiveXObject ) // Si c'est Internet Explorer, on crée un nouvel objet ActiveX de type XMLHTTP
    			xhrObject[xhrCount] = new ActiveXObject("Microsoft.XMLHTTP");
    		else // Et si aucune des deux méthodes n'a fonctionné, on oublie AJAX !
    		{
    			alert( "Votre navigateur ne supporte pas le WEB2.0\nMerci d\'en utiliser un plus récent" );
    			return( false );
    		}
    
                            // Est-ce qu'on utilise le mode synchrône ou pas... ?!
    		if( sync == 1 ) // Mode synchrône
    		{
    			// L'objet est créé, on peut donc ouvrir la connexion. Le premier paramètre définit le mode d'envois des variables, GET ou POST
    			// Il est plus facil d'utiliser la méthode GET, j'expliquerai les raisons dans un avenir proche. Le deuxième paramètre correspond au script
    			// sur le serveur qui fera le traitement et enfin, true/false pour asynchrône/synchrone. Ici j'ai choisi ...? Synchrône
                            xhrObject[xhrCount].open( "GET", fichier, false );
                            // On envois la requête, ici sans contenu (null), mais il serait possible d'en envoyer.
                            xhrObject[xhrCount].send( null );
                            // Quand le serveur a terminé d'exécuter le script (état 4), on affiche le contenu retourné dans notre balise div
                            if( xhrObject[xhrCount].readyState == 4 )
                                    window.document.getElementById( id ).innerHTML = xhrObject[xhrCount].responseText;
    			else
    				return( false );
    		}
    		else // Mode asynchrône, on utilise cette fois une seconde fonction qui va gérer l'état
    		{
    			xhrObject[xhrCount].onreadystatechange = function() { ajax_display_multi(xhrObject[xhrCount],id,xhrCount,addContent); };
                            // La différence est qu'il faut cette fois mettre le troisième paramètre à true
    			xhrObject[xhrCount].open( "GET", fichier, true );
                            xhrObject[xhrCount].send( null );
      		}
    	}
    	function ajax_display_multi( xhr, id, count, addContent )
    	{
                    if( xhr.readyState == 4 )
    		{
    			// Est-ce que l'on ajoute le nouveau contenu dans notre zone ou pas...
                            if( addContent == 1 )
    				window.document.getElementById( id ).innerHTML += xhr.responseText;
    			else
    				window.document.getElementById( id ).innerHTML = xhr.responseText;
        		}
    	}
    	</script>
    </head>
    <body style="background-color:#ffffff">
    
    <div style="font-family:verdana;font-size:0.8em;margin:0px auto;padding:8px;width:400px;border:0px solid black;background-color:#ffffff;">
    Transfert de fichiers (les extensions autorisées sont <i>jpg</i>,<i>gif</i>,<i>png</i> et <i>pdf</i>)
    
    
    <p>
    <div style="font-family:verdana;font-size:0.8em;border:1px;padding:4px;margin:0px;" id="file_status_1267375385">
    <form name="file_1267375385" method="post" action="alt_index_upload.php" target="alt_index_upload" enctype="multipart/form-data">
    <input type="hidden" name="htmlElement" value="file_status_1267375385"/>
    <input type="file" name="fichier" onChange="document.file_1267375385.submit();document.getElementById('file_status_1267375385').innerHTML='Envoie en cours';">
    </form>
    </div>
    <div id="inpList" style="margin:0px;padding:8px 0 4px 0;"></div><p><p>
    <a href="javascript:void%200" style="font-family:verdana;font-size:0.8em;font-weight:bold;text-decoration:none;color:#143765;" onClick="ajax_call_multi('alt_index_ajax.php?action=add_file_input','inpList',0,1);" alt=""><img src="ajouter.png" border="0">Ajouter d'autres fichiers</a>
    </div>
    
    </body>
    </html>

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 10
    Par défaut
    n y aurait til pas une solution en utilisant ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var img = document.createElement('img');
    img.setAttribute('src', url)
    img.setAttribute('alt', 'blabla');

    et après on apelle la valeur 'img'

Discussions similaires

  1. [MFC] affichage image caméra dans un projet dialog
    Par Vestaproman dans le forum MFC
    Réponses: 3
    Dernier message: 07/02/2005, 13h27
  2. [Image] Affichage image en 12 bits
    Par Plawi dans le forum 2D
    Réponses: 9
    Dernier message: 18/11/2004, 09h34
  3. Affichage Image
    Par greg_one dans le forum Composants
    Réponses: 5
    Dernier message: 22/06/2004, 16h10
  4. Problème de mémoire Affichage images
    Par Repti dans le forum C++Builder
    Réponses: 6
    Dernier message: 29/03/2004, 20h06
  5. [Kylix] pb Affichage image .jpg
    Par sioux dans le forum EDI
    Réponses: 4
    Dernier message: 18/01/2004, 19h20

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