Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505

    Funzione Ajax, non sempre funziona

    Sul mio sito metto a disposizione alcuni file da scaricare e vorrei tener traccia del numero di download.
    Per fare questo ho pensato di fare così:
    al click sul pulsante per il download avvio una funzione ajax che chiama uno script php passandogli come parametro il codice del file che si sta scaricando, lo script php poi aggiorna una tabella del db.
    Questa seconda parte non ha alcun problema, se chiamo direttamente dalla barra degli indirizzi lo script php con parametro get, ogni volta che ricarico la pagina il db viene aggiornato.

    Il problema è che invece cliccando sul pulsante l'aggiornamento non sempre avviene, come se la funzione ajax a volte fallisca la chiamata allo script php.
    Questa è la funzione Ajax
    codice:
    function addDownload(softid) { 
    
    	var req;
    
    	if(window.XMLHttpRequest){
    		//For Firefox, Safari, Opera
    		req = new XMLHttpRequest();
    	}
    	else if(window.ActiveXObject){
    		//For IE 5
    		req = new ActiveXObject("Microsoft.XMLHTTP");
    	} 
    	else if(window.ActiveXObject){
    		//For IE 6+
    		req = new ActiveXObject("Msxml2.XMLHTTP");
    	}
    	else{
    		//Error for an old browser
    		alert("Your browser is not IE 5 or higher, or Firefox or Safari or Opera");
    	}
    
    	var url = "utils/add_download.php?softid="+softid;
    
    	req.open("GET",url,true);
    	req.setRequestHeader("Connection", "close");
    	req.send(null);
    
    }
    E così è come la chiamo
    codice:
    [img]images/btn_download.png[/img]
    Cosa c'è che può generare il malfunzionamento?

  2. #2
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Inizia col togliere questa riga req.setRequestHeader("Connection", "close"); che non serve e potrebbe dare problemi, se il problema persiste inserisci degli alert nei vari step della funzione per capire dove si blocca e indica con quali browser provi o ha più problemi
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  3. #3
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Su Opera funziona sempre bene.

    Su FF4, IE7 e IE8 funziona sempre se ci sono gli alert, a singhiozzo se non ci sono. Con questi è come se senza gli alert fosse troppo veloce e non facesse in tempo a fare qualcosa.

    Su Chrome funziona sempre a singhiozzo.

    Su Safari non funziona mai.

  4. #4
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Hai tolto la riga? E visto che fai richieste get appendi un numero alla pagina var url = "utils/add_download.php?rnd="+ Math.floor(Math.random() * (9999))+"&softid="+softid; per eliminare il problema cache
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  5. #5
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Ho fatto le modifiche, ora la funzione è così
    codice:
    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);
    	
    }
    Ma continuo ad avere lo stesso problema.

    Mi sembra una funzione alquanto stupida, non c'è niente di così complicato... eppure non funziona.

    Posso chiederti come la scriveresti tu l'intera funzione Ajax per chiamare uno script php?
    La faresti diversa dalla mia o non c'è molto da inventarsi e si fa come ho fatto io?

  6. #6
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Originariamente inviato da Alhazred
    ..
    Posso chiederti come la scriveresti tu l'intera funzione Ajax per chiamare uno script php?
    Io userei jquery (essendomi orientato verso quel framework)
    La faresti diversa dalla mia o non c'è molto da inventarsi e si fa come ho fatto io?
    Non saprei vedi se qui se trovi aiuti
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  7. #7
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Niente da fare, non riesco a venirne fuori anche seguendo diversi tutorial.

    Usando JQuery per gestire la chiamata come dovrei fare?
    Tenendo conto che i pulsanti in questione sono elencati in questo modo
    codice:
    <div class="crd_downloads_entry_title">
    	Openspace
    
    	<a href="<?php echo $root ?>downloads/jtemplates/openspace/openspace-j16template-1.0.zip" >
    		[img]images/btn_download.png[/img]
    	</a>
    </div>
    l'attributo alt dei tag img li ho fatti diventare i codici da passare alla funzione php

    Sapendo quasi zero di JQuery ho fatto una cosa così (ma penso sia sbagliata)
    codice:
    $(".crd_downloads_entry_title > img").click(function() {
        $.ajax({
            url: "utils/add_download.php?rnd="+ Math.floor(Math.random() * (9999))+"&softid="+,
            async: false
        });
    });
    nella URL manca la parte finale, non so come selezionare l'attributo "alt" corretto relativo all'immagine cliccata visto che non posso semplicemente rendere il primo che viene trovato, ce ne sono diversi all'interno della stessa pagina e a me serve quello cliccato, non gli altri.

    Come faccio?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.