Ho un problema di cui non riesco a venire a capo, anche perchè non mi riesce di vederne la causa...
Comincio col descrivere in termini generali la cosa.
Ho una pagina, in cui ci sono una serie di blocchi di contenuto, ognuno inserito in un <div> il cui nome è composto dalla parola scheda seguita da un numero progressivo (per cui, nella pagina sono presenti div chiamati scheda1, scheda2, scheda3, etc...)
Per una serie di ragioni, relative ai tempi di caricamento ed altro, la pagina funziona in modo tale che carica tutti i contenuti soltanto delle prime 5 schede.
Quindi, man mano che la pagina scrolla, vengono caricati - uno per volta - i contenuti delle schede successive.
Per cui, in pratica, all'apertura della pagina ci saranno le schede da 1 a 5 con i contenuti completi, e quelle successive, a partire dalla 6, diciamo così vuote. Ci sarà perciò un div scheda6 ma senza contenuti, un div scheda7 sempre senza contenuti, e via così.
Allo scroll di pagina, si dovrebbe caricare il contenuto della scheda6, poi della 7, etc etc.
Questo, lo schema generale di massima.
Vediamo adesso come è costruita la pagina.
I contenuti di ciascuna scheda vengono caricati dinamicamente dal database, con una query fatta così:
Codice PHP:
$result = mysql_query("SELECT * FROM `offerte` WHERE ('$currentmonth' <= MONTH(`data_out`) AND '$currentyear' <= YEAR(`data_out`)) AND `data_out` >= '$today' AND `show_hide` != '$sh' GROUP BY `id_hotel` ORDER BY `hotel_pos`,`inter_pos`,`data_in` ASC");
while ($row = mysql_fetch_array($result)) {
...
Prima di fare la query, creo una variabile:
Codice PHP:
$fivelimit = 5;
e quindi, ad un certo punto, creo una condizione if/else che carica i contenuti nei div schedaX, fintanto che il valore numerico che identifica ciascuna scheda è inferiore o uguale a $fivelimit. Da quel punto in poi, vengono creati i div schedaX, ma vuoti di contenuti.
Fin qui, tutto funziona perfettamente.
Attraverso una funzione AJAX request, richiamata allo scroll di pagina, viene interrogata un'altra pagina PHP, che dovrebbe fornire i contenuti richiesti dalla pagina principale, dove poi vengono inseriti nel div schedaX relativo.
Il codice della request è fatto così:
Codice PHP:
...
var http = createRequestObject();
function sndReq(action) {
http.open('get', 'loadimg.php?action='+action);
http.onreadystatechange = handleResponse;
http.send(null);
}
function handleResponse() {
if (http.readyState == 4) {
var response = http.responseText;
var myimages = response.split('§');
var first = myimages[0];
var number = myimages[1];
document.getElementById("scheda"+number).innerHTML = first;
incrementa();
La funzione incrementa è questa:
Codice PHP:
var number = 6;
function incrementa() {
number = parseInt(number)+1;
}
E la request viene inviata con questa stringa:
Codice PHP:
sndReq('step'+number);
La pagina PHP che riceve la request ha questo codice:
Codice PHP:
switch($_REQUEST['action']) {
case 'step6': $contatore = 6; break;
case 'step7': $contatore = 7; break;
case 'step8': $contatore = 8; break;
(etc etc)
}
Quindi parte la query:
Codice PHP:
$result = mysql_query("SELECT * FROM `offerte` WHERE ('$currentmonth' <= MONTH(`data_out`) AND '$currentyear' <= YEAR(`data_out`)) AND `data_out` >= '$today' AND `show_hide` != '$sh' GROUP BY `id_hotel` ORDER BY `hotel_pos`,`inter_pos`,`data_in` ASC LIMIT $contatore,1");
while ($row = mysql_fetch_array($result)) {
...
echo $contenuto . "§" . $contatore ;
}
Il problema che riscontro, in seguito allo scroll e la conseguente request AJAX, è questo:
- il caricamento avviene
- la numerazione corrisponde (faccio un echo della variabile $contatore) a quella del div scheda in cui avviene il caricamento
- il primo contenuto caricato (scheda6) è sempre quello della scheda3!
- la scheda7 carica il contenuto che andrebbe nella scheda8, e così via...
- questo schema non cambia, anche se vario il valore iniziale della variabile $number nel JS della pagina, o quello della variabile $contatore nel PHP...
Quello che non capisco proprio è come sia possibile che due query identiche, di cui la seconda ha in più solo la limitazione ad 1, ed a partire dall'elemento n (determinato dalla variabile $contatore), diano risultati diversi!
Non credo che il problema sia lato AJAX perchè il dato fondamentale che viene gestito da questo è il dato numerico che identifica il div scheda, ma quello corrisponde sempre...
Please, help me!!!!