Topic: [Résolu] Tester la présence d'un fichier joint à une page via ajax

Bonjour,
je souhaite tester la présence d'un fichier joint d'une page dans un template.
Je me suis résolu à passer par du jquery car il n'y a pas possibilité à ma connaissance de tester si une pièce jointe est présente sur une page dans le xsl d'un te mplate.

Voici mon code :

           $j.ajax({
                url:'<xsl:value-of select="$absolute-site-uri-prefix" />/<xsl:value-of select="$lang" />/<xsl:value-of select="ametys:pagePath()" />/_attachments/visuel-gauche.png',                
                type:'HEAD',
                error: function()
                { 
                    $j(".interieur-gauche").css("background-image","url('<xsl:value-of select="ametys:skinURL('um_img/page_interieure/blason-interieur.png')" />')");                     
                },
                success: function()                   
                {
                    $j(".interieur-gauche").css("background-image","url('<xsl:value-of select="$absolute-site-uri-prefix" />/<xsl:value-of select="$lang" />/<xsl:value-of select="ametys:pagePath()" />/_attachments/visuel-gauche.png')");
                }
            });

Cela fonctionne sur mon bo en preview et en live, mais pas sur le front : il passe toujours par error.

Je précise que j'ai un serveur en back et un serveur en front dissocié.

J'ai fouillé et je ne trouve pas, j'ai creusé la piste du reverse proxy sous apache mais je ne trouve rien de tangible.

Auriez-vous des éléments susceptible de m'aider s'il vous plaît ?

Bonne journée

          AxelP

Last edited by APitrou (17/10/2018 12:02:24)

Re: [Résolu] Tester la présence d'un fichier joint à une page via ajax

Le code js me parait correcct, il faudrait analyser les logs liés à l'erreur.

Ne serait-il pas plus judicieux de passer par un contenu pour insérer cette image ? vous profiteriez de l'héritage des zones dans les sous-pages....

Raphael Franchet
Expert Ametys

Re: [Résolu] Tester la présence d'un fichier joint à une page via ajax

Last edited by APitrou (16/10/2018 11:25:22)

Re: [Résolu] Tester la présence d'un fichier joint à une page via ajax

Re: [Résolu] Tester la présence d'un fichier joint à une page via ajax

En creusant, j'ai appris plusieurs chose. Lors de l'utilisation d'un reverse proxy sous apache, jquery.ajax ne peut pas passer par la fonction "success" car détectant une redirection, il renvoit un code 302 et passera automatiquement par "error".
De là il faut passer obligatoirement par complete et filtrer le xhr.status 200 et le reste...

complete : function(xhr) { 
                        switch(xhr.status){
                            case 200 :
                                $j(".interieur-gauche").css("background-image","url('<xsl:value-of select="$absolute-site-uri-prefix" />/<xsl:value-of select="$lang" />/<xsl:value-of select="ametys:pagePath()" />/_attachments/visuel-gauche.png')");
                                break;
                            default :
                                $j(".interieur-gauche").css("background-image","url('<xsl:value-of select="ametys:skinURL('um_img/page_interieure/blason-interieur.png')" />')");
                                }
                    }
                }); 

Mais attention si vous avez une redirection customiser (erreur-404.html par exemple) sur vos différents code d'erreur (404, etc...), il renverra un code 200 car il trouve bien une page même si il ne s'agit pas de celle souhaitée.
De là j'ai fait une exception dans apache pour les contenus de type image.

<LocationMatch "\.(png|jpeg|jpg|gif)$">
             ErrorDocument 404  default
        </LocationMatch>

Voici la solution complète , tout d'abord la partie en js :

<script type="text/javascript" >
            $j(window).load(function()
            {           
                $j.ajax({
                    type:'GET',
                    dataType:'image/png',
                    url:'<xsl:value-of select="$absolute-site-uri-prefix" />/<xsl:value-of select="$lang" />/<xsl:value-of select="ametys:pagePath()" />/_attachments/visuel-gauche.png',
                    xhrFields: {withCredentials: true},                
                    complete : function(xhr) { 
                        switch(xhr.status){
                            case 200 :
                                $j(".interieur-gauche").css("background-image","url('<xsl:value-of select="$absolute-site-uri-prefix" />/<xsl:value-of select="$lang" />/<xsl:value-of select="ametys:pagePath()" />/_attachments/visuel-gauche.png')");
                                break;
                            default :
                                $j(".interieur-gauche").css("background-image","url('<xsl:value-of select="ametys:skinURL('um_img/page_interieure/blason-interieur.png')" />')");
                                }
                    }
                }); 
            });
        </script>

et après dans apache :

ProxyErrorOverride On
        ErrorDocument 400 http://www.univ-lemans.fr/fr/erreurs/erreur-400.html
        ErrorDocument 401 http://www.univ-lemans.fr/fr/erreurs/erreur-401.html
        ErrorDocument 403 http://www.univ-lemans.fr/fr/erreurs/erreur-403.html
        ErrorDocument 404 http://www.univ-lemans.fr/fr/erreurs/erreur-404.html
        <LocationMatch "\.(png|jpeg|jpg|gif)$">
             ErrorDocument 404  default
        </LocationMatch>

Je passe le post en résolu.

Last edited by APitrou (17/10/2018 12:02:09)