Comment passer un paramètre local/client à un script Ajax?

Résolu/Fermé
Aristide - 3 janv. 2023 à 16:47
 Aristide - 4 janv. 2023 à 18:09

Bonjour,

J'exécute ce petit programme.

Je souhaite que show.php dispose du currentTime de l'audio.

Comment faire svp?

<html><head> 
<link rel="stylesheet" type="text/css" href="css.css?t=<? echo time(); ?>"> </head> <body> 

<script src="jquery-1.3.2.min.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript" src="jquery.jclock.js"></script>


<?php

set_include_path ( get_include_path() . PATH_SEPARATOR . "../tools"
                                      . PATH_SEPARATOR . 'tools' ) ;

function audio ( $sound )
{
    ?>
    <figure>
    <figcaption>description</figcaption>
    <audio id="sound"
        controls autoplay
        src="<?php echo $sound ; ?>">
            <a href="<?php echo $sound ; ?>">
                Download audio
            </a>
    </audio>
</figure>

<?php
}

$sound = "data/a.mp3" ;

audio ( $sound ) ;

?>

<div id = "board"></div>

<script type="text/javascript" charset="utf-8">

/*

audio = document.getElementById ( "sound" ) ;
current_time = document.audio.currentTime ;

*/


function waitForMsg(){
$.ajax({
		type: "GET",
		url: "show.php?script=script.csv&soundtime=" ,
		async: true,
		cache: false,		
		success: function(data){
			$("#board").empty();
			$("#board").append(data);
		setTimeout("waitForMsg()",1000);
		},
		error: function(XMLHttpRequest,textStatus,errorThrown) {
	//	 alert("error: "+textStatus + "  "+ errorThrown  );
		setTimeout("waitForMsg()",15000);
		}
	  });
	}
	
	$(document).ready(
	 function() 
	 {	
	  waitForMsg(); 	 
	 });	
</script>



A voir également:

3 réponses

Mon besoin:

l'action de show.php dépend de l'avancement de l'audio (currentTime).

Ma question :

Comment passer cette information à show.php?

0
Grandasse_ Messages postés 924 Date d'inscription jeudi 28 janvier 2010 Statut Membre Dernière intervention 27 avril 2023 595
4 janv. 2023 à 00:09

Bonjour,

C'est quoi "l'action de show.php" ?

Et pourquoi vous vous obstinez à faire un traitement côté serveur de ce qui pourrait être fait côté client ?

0
Aristide > Grandasse_ Messages postés 924 Date d'inscription jeudi 28 janvier 2010 Statut Membre Dernière intervention 27 avril 2023
4 janv. 2023 à 00:32

Show.php fait différentes choses, dont plusieurs sont côté serveur, parce que

- l'information qu'il traite est côté serveur

- la procédure est côté serveur

Pourquoi tous ces messages inutiles au lieu de

- essayer de répondre à ma question

Ou

- passer votre chemin (si vous ne savez pas)

?

0

plop, pas de message inutile de ma part. Visiblement vous avez mal lu ou mal compris:

"Vu que vous voulez obtenir une donnée synchrone (le temps de lecture actuel d'un fichier audio) vous n'avez qu'à transférer la donnée obtenue par un formulaire vers une page de traitement PHP si vous voulez l'utiliser(la donnée de la durée de lecture d'un fichier dans le lecteur AUDIO) sur serveur."

Donc je répète en gras parce que vous n'avez pas la patience de lire et comprendre quand on vous réponds: avec un formulaire HTML sauf que comme ce n'est pas la bonne chose à faire vu que vous pouvez faire tout côté client. En précisant vos besoins il suffit de fournir les données au client donc dans le script PHP passer les données au HTML et éventuellement vous refaites en ajoutant de l'AJAX si vous voulez de l'AJAX. Sinon le moyen d'envoyer quelque chose à partir du client vers le serveur c'est un formualire HTML que vous pouvez rendre invisible avec un input type hidden et validé l'envoi par JavaScript.

Avec un formulaire si vos voulez tout faire côté serveur Il sera important de séparer le script PHP de la page HTML(une bonne pratique dans tous les cas), par contre vous devez recharger la page, donc plus de lecteur pendant ce temps et le contenu sera réinitialisé (le fichier audio remis au début et une coupure de la musique le temps de charger la page). Donc si vous voulez une lecture sans coupure ni devoir remettre par le code le temps de lecture au moment où il était vous ne pouvez clairement pas faire ça sur le serveur puisque ça nécessite de recharger la page qui n'existera pas le temps du traitement sur serveur. Ou alors biaiser en vous compliquant la vie avec des iframes ou un truc du genre.

Votre code est vraiment mal foutu, implique des problèmes(faire deux fois la même chose inutilement, ne pas charger correctement le JavaScript après que la page soit chargée)  et montre que vous n'avez as vraiment compris les outils que vous tentez d'utiliser, c'est normal quand on débute. Il ne vous reste plus qu'à vous retrousser les manches, par exemple en suivant les conseils que l'on vous a donné pour commencer, faudra lire d'abord hein ;).

Alors bon travail, déjà vous pouvez récupérer le temps de lecture et le mettre dans un formulaire avec un champ caché. Il restera plus grand chose à faire après.

-1
Aristide > Rmoea
4 janv. 2023 à 18:09

Comme indiqué sur l'entête, le problème est résolu.

J'ai trouvé comment passer le paramètre.

Vous pouvez aller troller un autre sujet.

0
jordane45 Messages postés 38389 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 janvier 2025 4 729
4 janv. 2023 à 06:55

Bonjour

Pour transmettre la données via ton ajax, il suffit de renseigner la variable dans l'URL

url: "show.php?script=script.csv&soundtime=" + cequetuveux 

Et pour récupérer le temps écoulé de ton audio tu dois pouvoir utiliser la méthode 

video.currentTime

https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/currentTime


0

Salut,

je ne comprends pas trop.

Comme vous devez le savoir AJAX sert à créer des métadonnées qui seront utilisées de manière asynchrone: AJAX = Asynchornymous JavaScript And XML.

Pour obtenir le temps de lecture d'un fichier audio il vous suffit d'utiliser l'API audio HTML5(un object JavaScript)

https://developer.mozilla.org/en-US/docs/Web/API/Web_Audio_API

ps2: tout votre JavaScript devrait se trouver dans l'objet

 
$<span>(</span>document<span>).</span><span>ready qui indique que la page es chargée.</span>

Pour tout vos problèmes et incompréhensions commencez par consulter la documentation appropriée ça sera un bon début pour pas faire des trucs à l'aveuglette.

Vu que vous voulez obtenir une donnée synchrone (le temps de lecture actuel d'un fichier audio) vous n'avez qu'à transférer la donnée obtenue par un formulaire vers une page de traitement PHP si vous voulez l'utiliser(la donné de la durée de lecture d'un fichier dans le lecteur AUDIO) sur serveur.

Sinon pour utiliser AJAX(dans quel sens? serveur vers client ou client vers serveur?) vous avez en vanilla JavaScript XMLHTTPRequest ou son équivalent plus pratique à utiliser en JQUERY.

Un script AJAX? Qu'est ce que cela veut dire, AJAX n'est pas un langage de script mais une méthode (ou astuce)sert à transférer des données en créant un fichier (métadonnées) qui est disponible pour quand on en a besoin(la partie asynchrone entre client/serveur) et cela pour éviter de multiplier des requêtes serveurs.

Cas pratique:

On obtient les données de la base de données à afficher puis on crée avec AJAX un fichier de métadonnées. La page s'affiche mais il n'y a aucun besoin d'afficher les données.

L'utilisateur clique sur une interface et là on fait un appel AJAX pour utiliser les données et les afficher dans la page = pas de nouvelle requête serveur, page plus rapide car il n'y a rien à charger cela est déjà fait, moins d'émission de CO2 et on sauve la planète(hmm) en évitant un utilisateur aigri parce que pour un simple clic il veut pas attendre d’avoir à généré les requêtes au serveur PHP et à la base de données ainsi que le rechargement de la page dans le navigateur.

Bref rien qui semble s'appliquer dans votre cas(mais vous avez très mal définit vos besoins fonctionnels donc j'en sais rien) car pour récupérer la valeur de lecture d'un lecteur cela se passe dans le lecteur qui existe uniquement par le navigateur dans le HTML de la page(donc après PHP). Éventuellement si c'est pour sauvegarder le temps de lecture sur une base de données pas vraiment besoin d'AJAX non plus il me semble..

ps: votre lien (balise a) n'a rien à faire dans le lecteur audio...qui sert à indiquer des contenus audio et la configuration du lecteur.

https://www.w3schools.com/html/html5_audio.asp

ps2: tout votre JavaScript doit se trouver dans :

 
$<span>(</span>document<span>).</span><span>ready</span><span>(</span>
	 <span>function</span><span>()</span> 
	 <span>{</span>	//début du SCRIPT ICI

Qui indique que la page est chargée.

Consultez la documentation et jetez un œil aux bases des technologies que vous utilisez ça sera un bon début pour comprendre plutôt qu'avancer à l'aveuglette ce qui ne donne jamais aucun résultat valable.

Pas logique non plus de devoir calculer une durée dans une boucle de 15s, il suffit simplement d'ajouter 15s à un compteur chaque passage de boucle. Donc vous l'avez votre temps de lecture si vous démarrez le compteur à 0 en début de lecture. Sinon vous faites 2 fois la même chose inutilement, autant utiliser l'un ou l'autre.

-1