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

AJAX Discussion :

Firefox ASP XMLHttpRequest


Sujet :

AJAX

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2004
    Messages : 178
    Par défaut Firefox ASP XMLHttpRequest
    Bonjour,

    envoi d'une requête XMLHttpRequest, avec Chrome pas de problème, tandis qu'avec Firefox ça marche seulement si j'affiche d'abord la variable ASP que je veux envoyer comme paramètre avec un alert...

    ce que j'aimerai réussir à faire est de supprimer l'alert....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <script type="text/javascript">
    			function envoi(){			
    				
    				var xhr = new XMLHttpRequest();				
    		
    				var sVar1 = encodeURIComponent("<%=NomFichier%>");
    				
    				xhr.open("GET", "handlingDataR.php?variable1=" + sVar1, true);
    				xhr.send(null);
    				alert("<%=NomFichier%>");
    			}
    			envoi();
    		</script>

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Hello,

    En général quand un alert() change quelque chose c'est parce qu'il force le script dans un temps d'attente qui n'est pas là d'habitude.

    Tu peux nous montrer un peu plus ce qui se passe avant et après ce script ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2004
    Messages : 178
    Par défaut
    Il s'agit de l'ajout d'une photo, l'internaute clique sur un input file pour ajouter une image et le formulaire est envoyé :

    le paramètre action du formulaire renvoi vers la page en cours avec 2 paramètres:

    document.forms['formPH'].action = "indexR.asp?tf=oui&aj1=oui"

    Puis les 2 paramètres sont évalués:

    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
     
     
    tf = request.querystring("tf")
     
    if tf = "oui" then 
     
    	nD  = now()
    	nD = Replace(nD,"/","_")  
    	nD = Replace(nD," ","_")   
    	nD = Replace(nD,":","_") 
     
    	aj1 = request.querystring("aj1")
    	aj2 = request.querystring("aj2")
    	aj3 = request.querystring("aj3")
    	aj4 = request.querystring("aj4")
    	aj5 = request.querystring("aj5")
    	sup1 = request.querystring("sup1")
    	sup2 = request.querystring("sup2")
    	sup3 = request.querystring("sup3")
    	sup4 = request.querystring("sup4")
    	sup5 = request.querystring("sup5")
     
    	if aj1 = "oui" or aj2 = "oui" or aj3 = "oui" or aj4 = "oui" or aj5 = "oui" then
    		Dim mySmartUpload			
    		Set mySmartUpload = Server.CreateObject("aspSmartUpload.SmartUpload")		
    		mySmartUpload.AllowedFilesList = "gif,jpg,jpeg,png"
    		mySmartUpload.DeniedFilesList="exe,php,asp,txt"
    		mySmartUpload.MaxFileSize = 500000					
    		mySmartUpload.Upload	
    	end if
     
    	if aj1 = "oui" then	
    	  	for each file in mySmartUpload.Files		
    			if not file.IsMissing then
    				NomFichier = nD & "_1_" & session("ps") & "." & file.FileExt
    				File.SaveAs(server.mappath(".") & "\Photos\" & NomFichier)						
    				rs("Photo1") = NomFichier
    				rs.update
    			end if	
    		Next %>
    		<script type="text/javascript">
    			function envoi(){			
     
    				var xhr = new XMLHttpRequest();				
     
    				var sVar1 = encodeURIComponent("<%=NomFichier%>");
     
    				xhr.open("GET", "handlingDataR.php?variable1=" + sVar1, true);
    				xhr.send(null);
    				alert("<%=NomFichier%>");
    			}
    			envoi();
    		</script><%		
    		set mySmartUpload = Nothing
    	end if
    le fichier handlingDataR.php permet de créer une vignette en se servant du paramètre envoyé, voici son contenu :

    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
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
     
     
    <?php
     
    header("Content-Type: text/plain"); // Utilisation d'un header pour spécifier le type de contenu de la page. Ici, il s'agit juste de texte brut (text/plain).
     
    function fct_redim_image($Wmax, $Hmax, $rep_Dst, $img_Dst, $rep_Src, $img_Src) {
      // ------------------------------------------------------------------
     $condition = 0;
      // Si certains paramètres ont pour valeur '' :
       if ($rep_Dst == '') { $rep_Dst = $rep_Src; }  // (meme repertoire)
       if ($img_Dst == '') { $img_Dst = $img_Src; }  // (meme nom)
       if ($Wmax == '') { $Wmax = 0; }
       if ($Hmax == '') { $Hmax = 0; }
      // ------------------------------------------------------------------
      // si le fichier existe dans le répertoire, on continue...
     if (file_exists($rep_Src.$img_Src) && ($Wmax!=0 || $Hmax!=0)) { 
        // ----------------------------------------------------------------
        // extensions acceptées : 
       $ExtfichierOK = '" jpg jpeg png"';  // (l espace avant jpg est important)
        // extension
       $tabimage = explode('.',$img_Src);
       $extension = $tabimage[sizeof($tabimage)-1];  // dernier element
       $extension = strtolower($extension);  // on met en minuscule
        // ----------------------------------------------------------------
        // extension OK ? on continue ...
       if (strpos($ExtfichierOK,$extension) != '') {
           // -------------------------------------------------------------
           // récupération des dimensions de l image Src
          $size = getimagesize($rep_Src.$img_Src);
          $W_Src = $size[0];  // largeur
          $H_Src = $size[1];  // hauteur
           // -------------------------------------------------------------
           // condition de redimensionnement et dimensions de l image finale
           // -------------------------------------------------------------
           // A- LARGEUR ET HAUTEUR maxi fixes
          if ($Wmax != 0 && $Hmax != 0) {
             $ratiox = $W_Src / $Wmax;  // ratio en largeur
             $ratioy = $H_Src / $Hmax;  // ratio en hauteur
             $ratio = max($ratiox,$ratioy);  // le plus grand
             $W = $W_Src/$ratio;
             $H = $H_Src/$ratio;   
             $condition = ($W_Src>$W) || ($W_Src>$H);  // 1 si vrai (true)
          }
           // -------------------------------------------------------------
           // B- LARGEUR maxi fixe
          if ($Hmax != 0 && $Wmax == 0) {
             $H = $Hmax;
             $W = $H * ($W_Src / $H_Src);
             $condition = $H_Src > $Hmax;  // 1 si vrai (true)
          }
           // -------------------------------------------------------------
           // C- HAUTEUR maxi fixe
          if ($Wmax != 0 && $Hmax == 0) {
             $W = $Wmax;
             $H = $W * ($H_Src / $W_Src);         
             $condition = $W_Src > $Wmax;  // 1 si vrai (true)
          }
           // -------------------------------------------------------------
           // on REDIMENSIONNE si la condition est vraie
           // -------------------------------------------------------------
          if ($condition == 1) {
              // création de la ressource-image"Src" en fonction de l extension
              // et on crée une ressource-image"Dst" vide aux dimensions finales
             switch($extension) {
             case 'jpg':
             case 'jpeg':
               $Ress_Src = imagecreatefromjpeg($rep_Src.$img_Src);
               $Ress_Dst = ImageCreateTrueColor($W,$H);
               break;
             case 'png':
               $Ress_Src = imagecreatefrompng($rep_Src.$img_Src);
               $Ress_Dst = ImageCreateTrueColor($W,$H);
                // fond transparent (pour les png avec transparence)
               imagesavealpha($Ress_Dst, true);
               $trans_color = imagecolorallocatealpha($Ress_Dst, 0, 0, 0, 127);
               imagefill($Ress_Dst, 0, 0, $trans_color);
               break;
             }
              // ----------------------------------------------------------
              // REDIMENSIONNEMENT (copie, redimensionne, ré-echantillonne)
             ImageCopyResampled($Ress_Dst, $Ress_Src, 0, 0, 0, 0, $W, $H, $W_Src, $H_Src); 
              // ----------------------------------------------------------
              // ENREGISTREMENT dans le répertoire (avec la fonction appropriée)
             switch ($extension) { 
             case 'jpg':
             case 'jpeg':
               ImageJpeg ($Ress_Dst, $rep_Dst.$img_Dst);
               break;
             case 'png':
               imagepng ($Ress_Dst, $rep_Dst.$img_Dst);
               break;
             }
              // ----------------------------------------------------------
              // libération des ressources-image
             imagedestroy ($Ress_Src);
             imagedestroy ($Ress_Dst);
          }
           // -------------------------------------------------------------
       }
     }
    // --------------------------------------------------------------------------------------------------
      // retourne : 1 (vrai) si le redimensionnement et l enregistrement ont bien eu lieu, sinon rien (false)
      // si le fichier a bien été créé
     if ($condition == 1 && file_exists($rep_Dst.$img_Dst)) { return true; }
     else { return false; }
    }
    // -------------------------------------------------------------------------------------------------- 
     
    $variable1 = (isset($_GET["variable1"])) ? $_GET["variable1"] : NULL;
     
    // Les paramètres :
    // - $Wmax : LARGEUR maxi finale ----> ou 0 : largeur libre
    // - $Hmax : HAUTEUR maxi finale ----> ou 0 : hauteur libre
    // - $rep_Dst : répertoire de l image de Destination (déprotégé) ----> ou '' : même répertoire
    // il faut s'assurer que les droits en écriture ont été donnés au dossier (chmod ou via logiciel FTP)
    // - $img_Dst : NOM de l image de Destination ----> ou '' : même nom que l image Src
    // - $rep_Src : répertoire de l image Source (déprotégé)
    // - $img_Src : NOM de l image Source
     
    if ($variable1) {
        // Faire quelque chose... 
        $variable2 = "tn_".$variable1;  
        $redimOK = fct_redim_image(180,180,'PhoV/',$variable2,'Photos/',$variable1);
        //echo "OK";
    } else {
        echo "FAIL";
    }
    ?>
    exit;
    ?>

  4. #4
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    c'est quoi tout ce binz tu nous par le de asp et tu poste du php

    c'est toujours une mauvais idée que de produire du js en asp ou php. il est beaucoup plus simple clair et efficace de mettre le js dans un fichier js statique.

    mais je crois que le problème est ailleurs
    si j'ai compris tu as un asp qui génère une page qui contient un js qui invoque un php
    tu as donc deux serveur un asp un php.
    as tu fixé les autorisation nécéssaire pour qu'une page de l'un puisse appeler une url de l'autre ?

    A+JYT

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2004
    Messages : 178
    Par défaut
    1) Non, J'ai un seul serveur mais il accepte les pages .asp et .php, le code est fonctionnel il n'y a pas besoin d'autorisations....

    2) j'utilise toutes ces technologies car j'en ai besoin !

    3) Le problème est que Firefox interprète différemment le code que Chrome, le code fonctionne aussi avec Firefox mais dans l'état actuel je suis obligé d'afficher une alert....

  6. #6
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    Ce qu'interprète ff cenest pas l'asp mais le html et js généré.
    Pour comprendre il faudrais boir le code dans le navigateur.
    Dans ff un F12 doit te permettre de le récupérer.
    A+

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2004
    Messages : 178
    Par défaut
    ff interprète le code html et le javascript, ça je le sais...

    J'ai mis assez d'infos infos ici pour que l'on puisse analyser le problème, je ne souhaite pas publier le contenu de ma page.asp (code html et javascript).

    Ce n'est pas un problème très important (juste l'affichage d'une pop-up supplémentaire pour que cela fonctionne).

    Pour l'instant j'ai mis cette amélioration à apporter à plus tard, maintenant je m'occupe de la compatibilité avec Internet Explorer !.

  8. #8
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    tu nous publie un bout d'asp qui est sensé nous permettre de comprendre ce que fais js c'est paradoxal.

    je vais prendre un exemple caricatural
    Code asp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    document.getElementById('myButton').onclick=function() {
        console.log('<%=aVar%>');
    }

    je te poste ça et je te dis je ne comprends pas lorsque je clique sur le bouton il ne se passe rien.
    tu peux toujours essayer de comprendre pourquoi ce JS ne fonctionne pas. Mais ça ne ser à rien vu que ce n'est pas du JS mais de l'asp.

    ce qu'interprète le navigateur c'est le JS généré. et pour ça il fat savoir ce que produit l'asp.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    document.getElementById('myButton').onclick=function() {
        console.log('');
    }
    document.getElementById('myButton').onclick=function() {
    }
    a=('');

    et là c'est magique tout s'explique.
    sans l'info du contenu de aVar tu ne peux pas savoir ce qu'il se passe dans js car le code asp peut produit tout autre chose que ce à quoi le bout de code asp posté lfait penser. débugger des suppositions est une perte de temps.

    Code asp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    aVar="');\n}\ndocument.getElementById('myButton').onclick=function() {\n}\na=('";
    %>
    <script type="text/javascript">
    document.getElementById('myButton').onclick=function() {
        console.log('<%=aVar%>");
    }

    je répète que générer du JS en ASP n'est ni efficace ni productif ni facile. il est beaucoup plus simple d'avoir un js statique et de ne passer que des variables de asp à JS.

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2004
    Messages : 178
    Par défaut
    Merci pour ton aide.

    Je vais probablement trouver la solution... comme d'habitude :-)

  10. #10
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    Comme tu veux

    Si la charte du forum demande de poster le code (fragment de code) présent dans le navigateur ce n'est pas pour vous embêter mais pour vous aider.
    Là je ne peux aider je n'ai pas le code du navigateur qui me permettrais de reproduire le problème et donc de l'analyser.

    A+JYT

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2004
    Messages : 178
    Par défaut
    Bon...: seulement un fragment de code, je peux !

    résumé:
    - le code fonctionne correctement sur chrome !
    - sur firefox j'arrive à uploader la photo mais la vignette ne se crée pas. Elle se crée uniquement si j'ajoute une pop-up (alert) qui contient la variable NomFichier.

    Mon code pour la vignette :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <img src="PhoV/tn_<%=rs("Photo1")%>" width="100px" class="img-circle" />

    voici le code source (firefox) à l'emplacement de la vignette:
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <img src="PhoV/tn_15_10_2016_15_22_07_1_homme1.jpg" class="img-circle" width="100px">

    Sur le serveur la vignette n'est pas crée et donc dans le navigateur firefox il y a un espace blanc.

  12. #12
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Bon bah voilà, le problème c'est que tu fais l'appel pour créer la vignette, sur la même page qui essaie de s'en servir avec <img> !
    Firefox voit la balise <img> et essaie d'aller récupérer l'image qui s'y trouve, mais tout cela se passe avant que l'appel JavaScript qui crée l'image n'ait le temps de se finir.
    Les autres navigateurs n'ont pas de raison particulière que ça se passe différemment, mais on peut supposer que le hasard de la gestion des threads et processes de Chrome font que ça se passe comme tu voulais. Coup de bol.

    Le plus simple, c'est de remplacer true par false dans ton xhr.open(), pour que l'appel ne soit plus asynchrone, mais qu'il attende d'avoir fini avant de passer à la suite. Du coup plus besoin d'un alert() qui force une attente suffisante pour que ça finisse.

    Mais tout cela n'est pas très responsive. Il aurait mieux valu que ton appel XMLHttpRequest soit fait au chargement du document, dans les headers, avec un document.addListener('DOMContentLoaded'), et ajouter un callback onreadystatechange qui ajoute l'image à l'intérieur de la page une fois que l'appel de création de vignette s'est bien terminé.
    Tout cela sont des choses qu'un tutoriel AJAX t'aurait appris.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2004
    Messages : 178
    Par défaut
    Wouavvvvv..., excellente réponse !, merci !

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

Discussions similaires

  1. firefox asp:table, z-index probleme
    Par Phil_L dans le forum ASP.NET
    Réponses: 1
    Dernier message: 24/07/2007, 20h25
  2. XMLHttpRequest & script ASP
    Par flykev dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 20/07/2006, 18h59
  3. [C#][1.1]Firefox et asp.net
    Par cybermaxs dans le forum ASP.NET
    Réponses: 3
    Dernier message: 07/06/2006, 09h55
  4. Réponses: 2
    Dernier message: 08/02/2006, 14h11
  5. Xmlhttprequest, problème avec IE... et pas sous Firefox
    Par Saiyan dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 25/01/2006, 14h47

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