Alhazred
13-05-2011, 12:22
Su una pagina del mio sito ho alcuni file che si possono scaricare e voglio tener traccia del numero di download.
Per farlo ho realizzato una tabella in un db con una entry per ogni file e uno script php che riceve come parametro il codice del file e aggiorna la relativa entry.
Fino a qui nessun problema perché se nella barra degli indirizzi metto la url fino allo script comprensiva di un codice valido ad ogni refresh della pagina il db viene aggiornato correttamente.
Adesso viene il problema, vorrei fare in modo che questo script venga chiamato ogni volta che si clicca sul link per il download e che ciò avvenga tramite Ajax per non ricaricare la pagina.
Questa è la funzione che ho scritto, ma funziona a singhiozzo, nel senso che a volte il db viene aggiornato ed altre no.
Non riesco a capirne il motivo, voi vedete qualche errore?
La fareste in modo diverso?
function addDownload(softid) {
var req;
if(window.XMLHttpRequest){
//For Firefox, Safari, Opera
req = new XMLHttpRequest();
}
else if(window.ActiveXObject){
//For IE 6+
req = new ActiveXObject("Msxml2.XMLHTTP");
}
else{
//Error for an old browser
alert("Your browser is not IE 6 or higher, or Firefox or Safari or Opera");
}
var url = "utils/add_download.php?rnd="+ Math.floor(Math.random() * (9999))+"&softid="+softid;
req.open("GET",url,true);
req.send(null);
}
Questa funzione viene chiamata cliccando su un'immagine alla quale è associato il link al file, così
<a href="downloads/jtemplates/koi/koi-j16template-1.0.zip" >
<img src="images/btn_download.png" alt="download" title="download" onclick="addDownload('koi')"/>
</a>
La funzione parte sempre (ho provato con un alert), ma non sempre attiva lo script php.
Per farlo ho realizzato una tabella in un db con una entry per ogni file e uno script php che riceve come parametro il codice del file e aggiorna la relativa entry.
Fino a qui nessun problema perché se nella barra degli indirizzi metto la url fino allo script comprensiva di un codice valido ad ogni refresh della pagina il db viene aggiornato correttamente.
Adesso viene il problema, vorrei fare in modo che questo script venga chiamato ogni volta che si clicca sul link per il download e che ciò avvenga tramite Ajax per non ricaricare la pagina.
Questa è la funzione che ho scritto, ma funziona a singhiozzo, nel senso che a volte il db viene aggiornato ed altre no.
Non riesco a capirne il motivo, voi vedete qualche errore?
La fareste in modo diverso?
function addDownload(softid) {
var req;
if(window.XMLHttpRequest){
//For Firefox, Safari, Opera
req = new XMLHttpRequest();
}
else if(window.ActiveXObject){
//For IE 6+
req = new ActiveXObject("Msxml2.XMLHTTP");
}
else{
//Error for an old browser
alert("Your browser is not IE 6 or higher, or Firefox or Safari or Opera");
}
var url = "utils/add_download.php?rnd="+ Math.floor(Math.random() * (9999))+"&softid="+softid;
req.open("GET",url,true);
req.send(null);
}
Questa funzione viene chiamata cliccando su un'immagine alla quale è associato il link al file, così
<a href="downloads/jtemplates/koi/koi-j16template-1.0.zip" >
<img src="images/btn_download.png" alt="download" title="download" onclick="addDownload('koi')"/>
</a>
La funzione parte sempre (ho provato con un alert), ma non sempre attiva lo script php.