11486 sujets

JavaScript, DOM et API Web HTML5

Bonjour à tous,

J'ai un petit soucis, et ne trouvant aucunes solutions ces 2 derniers jours, je me permet de faire un petit post Smiley smile

Quand je clique sur un lien, j'affiche une modale (bootstrap) qui contient une iframe pour afficher un PDF.

Mais avant d'afficher cette modale, je copie mon fichier PDF dans un répertoire sur le serveur (c'est ce fichier que je souhaite mettre dans la source de l'iframe).

Je fais donc ma copie grâce à un fichier PHP appelé en AJAX. Et une fois cette copie faite, je change la source de mon iframe.

Problème: par moment mon fichier s'ouvre super bien, mais à d'autre, totalement aléatoire, j'ai une erreur (une pop up IE) qui indique que le fichier indiqué est introuvable. Alors que dans le répertoire de destination il existe bien. Et si je ferme ma modale et que je la ré-ouvre, le fichier s'affiche nickel (normal vu le la copie a déjà été faite le coup d'avant).

Ma piste de réflexion : je pense que je retourne le nom du fichier et donc je que le charge dans l'iframe avant que la copie ne soit terminée.

Mais impossible de trouver une solution... Alors peut être que ma réflexion n'est pas la bonne Smiley decu

Au clique sur le lien, j'appelle la fonction ouvrirFichier()
<a onclick="ouvrirFichier('monFichier.pdf')">
    Mon fichier
</a>
<div id="MaModal" class="modal">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <div class="row">
                    <div class="col-sm-12 col-md-12 col-md-12 col-lg-12">
                        <button class="close">FERMER</button>
                    </div>
                </div>
            </div>
            <div class="modal-body " id="divAffichagePDF">
                <iframe src="" id="monIframe" align="middle"></iframe>
            </div>
        </div>
    </div>
</div>
 

function ouvrirFichier(nomFichier)
{
	//définition des chemins du fichier original et de destination dans le repertoire de lecture
	cheminFichierOriginal = cheminRepertoireOriginal + nomFichier;
 	cheminFichierLecture = cheminRepertoireLecture  + nomFichier;
	//appel de la fonction qui fait la copie du fichier
	var retourCopie = ouvrirFichierDansRepertoireLecture(cheminFichierOriginal, cheminFichierLecture);
	
	retourCopie.complete(function(data)
	{		
		retourCopie = data.responseText;
		if(retourCopie == "ERROR")
		{
			//Affichage message erreur
		}
		else
		{
			//changement de la source de l'iframe			
			$('#MaModal').find('iframe').attr("src", cheminFichierLecture + "#toolbar=0");
			//affichage de la modale
			$('#MaModal').modal('show');
		}	
	});	
}

function ouvrirFichierDansRepertoireLecture(cheminFichierOriginal, cheminFichierLecture)
{
	//Execution du script qui fait la copie
 	return $.ajax({
			type:"POST",
 			async: false,
   			url: cheminSiteWeb + "ajax/ouvrirFichierDansRepertoireLecture.php",
   			data: "cheminFichierOriginal=" + cheminFichierOriginal + "&cheminFichierLecture=" + cheminFichierLecture 
   	});
}


Fichier PHP : ouvrirFichierDansRepertoireLecture.php
<?php    
//Test si le fichier n'existe pas déjà dans le répertoire de lecture
if(file_exists($cheminFichierRepertoireLecture))
{
	// S'il existe déjà, on ne fait rien
}
else
{
	//copie du fichier   
        if(!copy($_POST['cheminFichierOriginal'], $_POST['cheminFichierLecture']))
        {
            echo 'ERROR';
            exit;
        }
	else     
	{
		echo "OK";
	}
}       
?>

Merci par avance Smiley biggrin
Modifié par aurelieG (18 Apr 2017 - 09:15)