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

    Evitare sovrapposizione risultati ajax

    Chiamando contemporaneamente in una pagina l'oggetto XMLhttprequest in maniera sincrona o asincrona, mi è capitato di notare eccezzionalmente la sovrapposizione dei risultati della richieste, ovvero del responseText oppure del responseXML.
    Le chiamate contemporanee capitano in quanto dei timer javascript aggiornano alcuni dati facendo delle chiamate al server, utilizzando l'oggetto XHR nello stesso momento.
    Oltre che chiamando l'oggetto in maniera sequenziale, ovvero mettendo la chiamata ajax quando la chiamata precedente è in stato di completato/readystate conoscete un altro modo per verificare che la chiamata precedente sia terminata? Un modo che non richieda la presenza della nuova chiamata nel codice readystate di quella precedente. Grazie.

  2. #2
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,131
    A parte che non capisco perché non le vuoi fare a cascata, non mi risulta ci sia un altro metodo altre al readystate per verificare lo stato del server, d'altronde perché ci dovrebbe essere se c'è già quello e cosa cambierebbe? Per il tuo problema (se cosi possiamo definirlo) forse risolvi con jquery che ha una gestione/configurazione ajax più modulabile.
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  3. #3
    Il problema è che non tutto può essere messo a cascata nel readystate se alcune chiamate devono partire indipendentemente da altre.
    Immagina di avere un timer che ogni 5 secondi deve fare 2 chiamate, quelle posso metterle a cascata la seconda dopo la prima. Oltre a questo contemporaneamente in corrispondenza di alcune azioni dell'utente devo fare altre chiamate.
    Se due chiamate, una che ha la partenza temporizzata e l'altra attivatà dall'utente restano in attesa nello stesso momento (cosa poco probabile ma possibile e capitata) il risultato della chiamata può finire a quella sbagliata.

  4. #4
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,131
    A parte che non ci ho capito nulla sul motivo (ma l'importante è che lo capisca tu), io resto della mia idea l'unica possibilità e monitorare il readystate per capire lo stato del server.
    Prova comunque a vedere se (come già detto) se jquery può venirti in aiuto.
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  5. #5
    Si si, sicuramente approfondisco la gestione di XHR che fa Jquery ora, per capire tutti gli strumenti in più che vengono messi a disposizione. Se trovo una risposta specifica al problema la posto. Grazie dell'aiuto.

  6. #6
    Faccio un ultimo tentativo qui provando ad essere più chiaro visto che in precendenza non lo sono stato fino in fondo.

    function ajaxxxx()
    {
    var xmlhttp;
    if (window.XMLHttpRequest)
    {// code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp=new XMLHttpRequest();
    }
    else
    {// code for IE6, IE5
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange=function()
    {
    if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    Vorrei non mettere nuove funzioni ajax qui, in cascata una dopo l'altra, perchè non tutte le funzioni che mi servono devono partire una dopo l'altra.
    document.getElementById("myDiv").innerHTML=xmlhttp .responseText;
    }
    }
    Ma controllare il readystate qui, prima di ogni funzione. Ma non sembra funzionare. E' possibile farlo ed è logico? Ovviamente il controllo del readystate fatto qui non si riferirebbe alla funzione stessa, ma ad altre che possono essere in esecuzione.
    xmlhttp.open("GET","ajax_info.txt",true);
    xmlhttp.send();
    }

    Ciao grazie.

  7. #7
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,131
    Vorrei non mettere nuove funzioni ajax qui, in cascata una dopo l'altra, perchè non tutte le funzioni che mi servono devono partire una dopo l'altra.
    E metterci solo quelle che ti servono, no?
    Ma controllare il readystate qui, prima di ogni funzione. Ma non sembra funzionare. E' possibile farlo ed è logico? No. Ovviamente il controllo del readystate fatto qui non si riferirebbe alla funzione stessa, ma ad altre che possono essere in esecuzione.
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

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 © 2024 vBulletin Solutions, Inc. All rights reserved.