2012-10-24 13 views
5

Sto utilizzando l'elemento HTML5 Audio all'interno del mio file HTML.HTML5 Audio. Sostituzione elemento ancora lo stesso file audio (memorizzato nella cache) come risolvere?

Provando molti metodi, non riesco proprio a sostituire il file audio tramite AJAX, restituisce comunque lo stesso file audio.

<div id="audiodiv"> 
    <audio id="audioelement"> 
    <source src="test.ogg" type="audio/ogg"> 
    </audio> 
</div> 

Così registro un nuovo file chiamato test.ogg che sovrascrive quello vecchio. Ho provato a usare jQuery e usando $("#audiodiv").html('') e re-rendering di questa parte. Quindi recuperando l'elemento tramite document.getElementbyID e quindi utilizzando .play() function.

Restituisce lo stesso vecchio test.ogg, che era già stato sovrascritto da quello nuovo.

Così ho provato a eliminare la cache, ancora lo stesso problema.

L'unico modo in cui funziona è l'eliminazione della cache e la chiusura del browser e chiamando nuovamente la pagina ...

Come posso risolvere questo problema?

Grazie mille per l'aiuto.

+2

È inoltre possibile aggiungere un parametro di busting della cache nell'URL src audio come 'var src =" test.ogg? Cache-buster = "+ new Date(). GetTime()' – maxdec

risposta

3

Se non si intende modificare il nome del file ma continuare ad aggiornarlo, è necessario aggiungere immediatamente intestazioni HTTP Expires alla risposta sul lato server. Il modo esatto in cui lo fai dipende dal server che stai utilizzando. Quelli comuni includono Apache e IIS.

Tuttavia, sarebbe più semplice, e anche better practice, lasciare che il browser memorizzi l'audio nella cache e assegnare semplicemente un nome diverso a ciascun nuovo file.

+0

Grazie per aver risposto a questo. Daremo un'occhiata più da vicino alle intestazioni HTTP. – zer02

+0

@ zer02 Ho risolto il problema semplicemente passando un timestamp come parametro querystring. ex: 'var param = new Date(). getTime(); src = src + "? cb =" + param; audio.load (src); audio.play(); 'grazie alla risposta http://stackoverflow.com/a/25823431/1201322 – Ravimallya

2

La soluzione più semplice e rapida consiste nel modificare il nome del file. Questo risolverà il problema. Altrimenti vai con la soluzione di robertc. Personalmente vorrei solo cambiare il nome del file.

+0

La modifica del nome file * è * la soluzione di robertc ... – robertc

0

se si inserisce il tag <audio> in un

quindi aggiornare la con un ritardo di 5 secondi durante l'evento in cui si carica il nuovo file audio. Potrebbe emettere il tuo nuovo file audio.

$('#UploadNewSoundButton').click(function(){ 
     //insert code that uploads new sound file 

     setTimeout(function(){ 
      window.frames['iframeWithAudio'].location.reload(); 
     },5000) 
}) 

forse ??? Sono nuovo qui.

1

ho usato lo stesso lato server di file utilizzando un JS senza cache di trucco in questo modo:

var audioPlayer = $('<audio src="/' + mp3FileName + '?noCache=' + Math.floor(Math.random() * 1000000) + '" type="audio/mpeg" autoplay controls></audio>'); 

Impostazione del scadere, Last-Modified, e l'intestazione Cache-control non ha funzionato per me, ma l'aggiunta di un una stringa casuale di numeri per lo src come una variabile GET ha fatto il trucco.

Problemi correlati