Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    caricamento tramite ajax di script php

    Ciao a tutti, ho un problema con una semplice chiamata AJAX; ho provato a cercare nel forum ma non ho trovato nulla che facesse al caso mio oppure non ho cercato bene.
    Vi spiego il problema:
    ho una semplice pagina html, costituita da due div, il primo contenente l'intestazione della pagina, e il secondo che racchiude il contenuto.
    Al primo caricamento della pagina, il secondo div è completamente vuoto, ma viene riempito non appena l'utente clicca uno dei link nella barra di navigazione, eseguendo quindi lo script js che richiama lo script php.
    Il problema è che lo script php genera una tabella composta da svariate righe (sono 26 colonne per poco più di 50'000 righe) che deve essere stampata interamente in unica pagina e avevo pensato che richiamando questo script tramite ajax non avrei rallentato l'intero browser, inserend,o nel div dove andrà in stampa la tabella, una gif animata per far capire all'utente il caricamento in corso.
    Nonostante tutto mi sono scontrato con un gran rallentamento del browser, a causa di questo, la gif non viene mostrata e tutto (il browser) rimane inutilizzabile fino a quando il caricamento della tabella non viene ultimato.
    Questa è lo script js che ho utilizzato per richiamare la tabella da php:
    codice:
    var loading="<span id=\"stat-text\">Caricamento in corso</span><span id=\"stat-img\"><img src=\"img/ajax-loader.gif\" /></span>";
    var load_comp="<span id=\"stat-text\">Caricamento completato</span><span id=\"stat-img\"><img src=\"img/ajax-loader-ok.png\" width=\"28\" height=\"28\" /></span>";
    var xmlhttp;
    
    function startFunc(){
    	if (window.XMLHttpRequest){
    	// code for IE7+, Firefox, Chrome, Opera, Safari
    	xmlhttp = new XMLHttpRequest();
    	}else{
    	// code for IE6, IE5
    	xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    	}
    }
    
    function anag_goto(page){
    	var url = "anag.php"+ "?anag="+page+"&random="+Math.random();
    	
    	xmlhttp.open("GET","../"+url,true);
    	xmlhttp.onreadystatechange=function(){
    		if (xmlhttp.readyState==3){
    			document.getElementById("status").innerHTML=loading;
    		}else{
    			document.getElementById("status").innerHTML="";
    		}
    		if (xmlhttp.readyState==4 && xmlhttp.status==200){
    			result=xmlhttp.responseText;
    			document.getElementById("container").innerHTML="";
    			document.getElementById("container").innerHTML=result;
    			document.getElementById("status").innerHTML=load_comp;
    		}
    	}
    	xmlhttp.send();
    }
    Qualcuno saprebbe spiegarmi come evitare il rallentamento, stampano quindi la gif, fino a che il server non restituisce la tabella per intero?

  2. #2
    Utente di HTML.it L'avatar di m4rko80
    Registrato dal
    Aug 2008
    residenza
    Milano
    Messaggi
    2,655
    Ciao, il problema e' probabilmente dovuto alla quantità di dati, anche se caricati in ajax lo script parte e il server magari inchioda perchè la query è troppo pesante.
    Non puoi paginare i risultati sempre nel div?
    Prova a mettere un limit, vedrai che non rallenterà così tanto se il problema è quello.

  3. #3
    innanzitutto grazie per la risposta.
    Poi: il problema è proprio la quantità di dati!
    Io speravo che richiamando lo script php tramite ajax, il server avrebbe continuato a rallentare nell'eseguire la query ma che, almeno fino al suo completamento, la pagina del browser non venisse rallentata.

  4. #4
    Utente di HTML.it L'avatar di carlomarx
    Registrato dal
    Oct 2009
    Messaggi
    1,669
    Originariamente inviato da Alex_tuono
    (sono 26 colonne per poco più di 50'000 righe)
    (!!!)

    Con questi numeri non hai speranze di non impallare il browser. Lo impalleresti persino in puro HTML senza mai fare uso di javascript. Devi far caricare i dati un po' alla volta (un po' come facebook, che ti aggiunge nuovi contenuti man mano che scorri con la pagina).

  5. #5
    Originariamente inviato da carlomarx
    (!!!)

    Con questi numeri non hai speranze di non impallare il browser. Lo impalleresti persino in puro HTML senza mai fare uso di javascript. Devi far caricare i dati un po' alla volta (un po' come facebook, che ti aggiunge nuovi contenuti man mano che scorri con la pagina).
    non è che sapresti spiegarmi a grandi linee come fare?

  6. #6
    carichi un gruppo di dati e potresti impostare un timeout per far partire i blocchi successivi...

  7. #7
    ho risolto facendo caricare 100 alla volta e facendo la tabella in più pagine, anche se originariamente doveva essere tutto in un'unica pagina
    Grazie a tutti!!

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.