Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 24
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    121

    AJAX e XML problemi con lo status

    ciao a tutti vi espongo il mio problema(è abbastanza complicato da spiegare bene):

    allora incomincio con il dire che con explorer funziona e con firefox no...
    ho una pagina A che tramite una chiamata ajax mi carica dei dati e me li mostra a video... una volta a video cliccando su un'immagine apro un popUp che mi mostra i dettagli sui dati precedentemente visualizzati.

    Il popUp (pagina B) ha il compito di farmi midificare i dettagli... una volta cliccato su il pulsante salva nella pagina B... pesso i miei dati al server e chiamo dal popUp la funzione...

    window.opener.chiudiPopUp();

    ovviamente la funzione si trova nella pagina A

    codice:
    function chiudiPopUp()  {
    visualizzaRap(); //funzione che mi chiama la function ajax
    rifFin.close();   //rifFin è il riferimento al popUP
    }
    
    function visualizzaRap(xml)  {
       if(!xml)  {
    	var clienti = document.getElementById('cliente').value;
    	var dataI   = document.getElementById('dataI').value;
    	var dataF   = document.getElementById('dataF').value;
    		
    	var ceck = valid_md_rapportino(dataI,dataF);
    	if(ceck != "ok")  {
    		alert(ceck);
    	}  else {
    		var post = "cliente=" + clienti + "&dataI=" + dataI + "&dataF=" + dataF;
    		ajax_xml_call('rapportino.php?azione=show',post,visualizzaRap)
    	}
      }  else  { ....... }
    
    function ajax_xml_call(url,post,funzione){
    var ajax=crea_ajax();
        if(funzione!=null){
    	ajax.onreadystatechange=function(){
    	//alert(ajax.readyState);
    	if(ajax.readyState==4){
    	//alert(ajax.status);
    	if(ajax.status==200){//tutto ok
    ............
    .........
    il problema nasce dentro la funzione ajax_xml_call... non arriva mai ad avere ajax.status e quindi non mi aggiorna i dati... (ovviamente se faccio la chiamata in un secondo momento tutto rifunziona correttamente).
    per me ci sono dei problemi di sincronizzazione che sono dovuti alla chiusura del popUp(se non lo chiudo tutto funziona[CON EXPLORER FUNZIONA ANCHE CON POPUP CHIUSO])

    AIUTATEMI NON SO' PIù DOVE BATTERE LA TESTA... E' IMPORTANTE

  2. #2
    Sarebbe opportuno controllare anche il corpo della funzione creaAjax().
    Forse l'XHR viene implementato solo con l'oggetto ActiveX o comunque di implementazione dell'oggetto.

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    121
    codice:
    function crea_ajax(){
    	if(typeof XMLHttpRequest!="undefined"){
    		return new XMLHttpRequest();
    	}
    	else if(window.ActiveXObject){ //versione di IE precedente alla 7
    		var ajax_version = ["MSXML2.XMLHttp.5.0","MSXML2.XMLHttp.4.0","MSXML2.XMLHttp.3.0","MSXML2.XMLHttp.2.0","MSXML2.XMLHttp"];
    		for(var ajax_i=0; ajax_i<ajax_version.length; ajax_i++){
    		  try{
    				var ajax_obj = new ActiveXObject(version_ajax[ajax_i]);
    				return ajax_obj;
    			}
    			catch(e){;}
    		}
    	}
    	
    	return null;
    }
    ecco qua la mia funziona crea ajax... spero che almeno tu mi possa aiutare...

  4. #4
    Allora...
    credo di aver capito.
    La funzione
    codice:
    function chiudiPopUp()  {
    visualizzaRap(); //funzione che mi chiama la function ajax
    rifFin.close();   //rifFin è il riferimento al popUP
    }
    Inizializza ajax, crea la chiamata e chiude il popup con rifFin.close().
    Prova invece a fare così:
    codice:
    function chiudiPopUp()  {
    visualizzaRap(); //funzione che mi chiama la function ajax
    }
    ..
    ..
    ..
    visualizzaRap = function(){
    /*qui ci sono tutte le tue istruzioni...*/
    rifFin.close()
    }
    In tal modo il popup sarà chiuso solo ad operazioni completate e, spero, risolverai il problema.
    In realtà sono un po' andato ad intuito: credo che gli oggetti implementati da una finestra vengano distrutti da alcuni Browser quando l'entità che li ha creati non esiste più, ma dovrei controllare tutto il codice per essere sicuro.
    Il problema non è solo di Firefox, ma anche Opera e Safari incontrano problemi.
    Bisogna ricordare che l'oggetto XMLHTTPRequest è stato implementato come controllo ActiveX per prima da Microsoft e che ogni Browser ha non solo il suo modo di inizializzarlo, ma anche di gestirlo.

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    121
    ALLORA ho provato come dici tu... ho messo il comando rifFin.close(); alla fine di tutte le esecuzioni della funzione visualizzaRap ( che ti allego, almeno hai una visione totale del codice )

    codice:
    function visualizzaRap(xml)  {
    	if(!xml)  {
    		var clienti = document.getElementById('cliente').value;
    		var dataI   = document.getElementById('dataI').value;
    		var dataF   = document.getElementById('dataF').value;
    		
    		var ceck = valid_md_rapportino(dataI,dataF);
    		if(ceck != "ok")  {
    			alert(ceck);
    		}  else {
    			var post = "cliente=" + clienti + "&dataI=" + dataI + "&dataF=" + dataF;
    			ajax_xml_call('rapportino.php?azione=show',post,visualizzaRap)
    		}
    	}
    	else  {
    		//SE SI E' VERIFICATO UN ERRORE
    		var errore = xml.getElementsByTagName("errore");
    		
    		if(errore.length != 0)  {
    			var out = "NON e' possibile visualizzare i rapportini perche':\n\n";
    			var descError = getValue(errore[0],"descrizioneErrore");
    			out += "-" + descError;
    			alert(out);
    		}
    		
    		var rapportino = xml.getElementsByTagName("rapportino");
    		var out = "";
    		out =  "
    
    "; 
    		out += "<table id='int' border='1' style='border:1px #999999 solid; border-collapse:collapse'>";
    		out +=     "<tr align='center' style='font-weight:bold; background-color:#CCCCCC'>";
    		out +=	     "<td style='width:40px'></td>";
    		out +=		  "<td style='width:115px'>DATA INTERVENTO</td>";
    		out +=		  "<td style='width:110px'>DATA CREAZIONE</td>";
    		out +=		  "<td style='width:135px'>DATA ULT. MODIFICA</td>";
    		out +=		  "<td style='width:290px'>CLIENTE</td>";
    		out +=	  "</tr>";
    		if(rapportino.length == 0) {
    			out += "<tr><td align='center' style='height:30px;font-weight:bold' colspan='5'>NESSUN RAPPORTINO ESISTENTE PER I CRITERI SELEZIONATI</td></tr>";
    		}
    		for(i=0; i<rapportino.length; i++)  {
    			var id        = getValue(rapportino[i],"idrap");
    			var dataIn    = getValue(rapportino[i],"dataIn");
    			var dataCr    = getValue(rapportino[i],"dataCr");
    			var dataMd    = getValue(rapportino[i],"dataMd");
    			var societa   = getValue(rapportino[i],"societa");
    			
    			if(dataMd == "")  {
    				dataMd =  "<font style='font-size:8px; font-weight:bold'>NESSUNA MODIFICA</font>";
    			}
    			out += "<tr align='center'>";
    			out +=   "<td>";
    			out += 		"<a href='javascript:void(0);' OnClick='rifFin = apri(&quot;rapportino.php?idRap=" + id + "&azione=show_details&quot;,&quot;INFORAPPORTINO&quot;,650,600,1,null);'>";
    			out += 			"[img]img/info_rap.gif[/img]";
    			out += 		"</a>";
    			out += 		"[img]img/delete.gif[/img]";
    			out += 	"</td>";
    			out += "	 <td>"+ dataIn +"</td>";
    			out += "	 <td>"+ dataCr +"</td>";
    			out += "  <td>"+ dataMd +"</td>";
    			
    			out += "  <td>"+ societa +"</td>"; 
    			out += "</tr>";
    			
    		}
    		out += "</table>";
    
    rifFin.close(); 	
    
    		document.getElementById('datiRap').innerHTML = out;
    	}
    }

    ma facendo in questo modo il popUp rimane appeso... ovvero non si chiude... devo cliccarci sopra per farlo chiudere.. Questa era la prima soluzione che avevo adottato... ma poi scartata
    [ANCHE QUESTA FUNZIONE CON EXPLORER E NON CON FIREFOX e simili]

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    121
    Allora nessuna novità????

  7. #7
    Strano...
    Comunque, per maggiore "pulizia" sarebbe meglio invertire rifFin.close() e document.getElementById('datiRap').innerHTML = out

  8. #8
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    121
    ancora non ho provato a metterlo sotto... ma penso che non cambi nulla... quello che ho sicuramente notato.. che il problema esiste quando chiudo il popup subito dopo o prima della chiamata ad ajax... come se togliessi un riferimento...
    infatti se faccio un alert(ajax.status) non mi viene fuori niente...
    dimenticavo... non è una questione di pop up.. lo stesso identico problema nasce se dovessi fare un rindirizzamento ad un'altra pagina e subito dopo fare o prima la chiamata alla funzione (visualizzaRap()) che gestisce ajax..

  9. #9
    Ma nella finestra popup c'è codice javascript?

  10. #10
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    121
    Si si la finestra pop up è abbastanza complessa... c'è anche dell'ajax....

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.