Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    3

    Valore xmlhttp.status inesistente

    Ciao a tutti!

    Ho la necessità di creare una lista all'interno di un portale Sharepoint tipo la seguente:

    ID - NOME - COGNOME - LINK AL PDF

    Questa lista viene caricata da una tabella esterna al portale presente in un SQL Server 2005.

    Fino a questo punto tutto bene, l'unico mio problema è che il link deve funzionare solamente a patto che esista il documento PDF. Mi spiego un pochettino meglio: ad esempio per il primo nominativo con ID = 1 il documento pdf si chiamerà d0001.pdf.
    Per risolvere questo problema e quindi per verificare o meno l'esistenza ho deciso di utilizzare object XMLHttpRequest. All'interno di un file .js ho scritto le seguenti righe di codice:

    codice:
    var xmlhttp;
    
    function loadXMLDoc(url) { 	
    xmlhttp=null; 	
    if (window.XMLHttpRequest) 	 
     {// code for IE7, Firefox, Opera, etc.
     	  xmlhttp=new XMLHttpRequest();
     	  } 	else if (window.ActiveXObject)
     	  {// code for IE6, IE5
     	  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 	  }
     	if (xmlhttp!=null) 	  {
     	  xmlhttp.onreadystatechange=state_Change;
     	  xmlhttp.open("GET",url,true);
     	  xmlhttp.send(null);
     	  }
     	else
     	  {
     	  alert("Your browser does not support XMLHTTP.");
     	  }
     }
    
     function state_Change() {
     	if (xmlhttp.readyState==4)
     	  {// 4 = "loaded"
     	  if (xmlhttp.status==200)
      	  {// 200 = "OK" 404 = "File non found"
     	    document.getElementById('A1').innerHTML=xmlhttp.status;
     	    //document.getElementById('A2').innerHTML=xmlhttp.statusText;
     	    //document.getElementById('A3').innerHTML=xmlhttp.responseText;
     	  }
     	  else
              {  alert("Problem retrieving XML data: " + xmlhttp.statusText);
    	  }
     	}
     }
    Il tutto funziona in maniera perfetta, se inserisco un alert all'interno del controllo del xmlhttp.status mi risponde perfettamente 200 o 404 (o ciò che deve rispondere...).

    Il mio problema è che non riesco a restituire una variabile contenente il valore della xmlhttp.status per poterlo poi gestire in un'altra funzione.

    Ad esempio se scrivo:

    codice:
     function state_Change() {
     	if (xmlhttp.readyState==4)
     	  {// 4 = "loaded"
     	  if (xmlhttp.status==200)
      	  {// 200 = "OK" 404 = "File non found"
     	    document.getElementById('A1').innerHTML=xmlhttp.status;
     	    //document.getElementById('A2').innerHTML=xmlhttp.statusText;
     	    //document.getElementById('A3').innerHTML=xmlhttp.responseText;
               var Risultato = 1; // oppure var Risultato = xmlhttp.status;
     	  }
     	  else
              {  alert("Problem retrieving XML data: " + xmlhttp.statusText);
    	  }
     	}
     }
    
    function ResultTestDoc(url) {
    	 
    	 alert('Dentro la funzione result: '+Risultato);
    
    }
    il risultato che mi dà il browser è che la variabile Risultato non è definita.

    Come posso fare, è circa due settimane che ci sbatto la testa! HELP!!!


    Grazie mille!!

  2. #2
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Questa lista viene caricata da una tabella esterna al portale presente in un SQL Server 2005.

    Il javascript e ajax non possono operare su domini diversi, poi caso mai non è questo il problema.
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  3. #3
    Devi dichiarare la variabile Risultato esterna alle funzioni (globale) così come fai per la variabile xmlhttp

    quindi all'inizio:
    codice:
    var xmlhttp;
    var Risultato = -1; // messo a -1 cosi' resta tale fino a che 
                        // la chiamata ajax e' in corso, poi 
                        // le viene assegnato il valore di xmlhttp.status
                             
    ....
    e, la state_Change() diventa:
    codice:
     function state_Change() {
     	if (xmlhttp.readyState==4)
     	  {// 4 = "loaded"
     	  if (xmlhttp.status==200)
      	  {// 200 = "OK" 404 = "File non found"
     	    document.getElementById('A1').innerHTML=xmlhttp.status;
     	    //document.getElementById('A2').innerHTML=xmlhttp.statusText;
     	    //document.getElementById('A3').innerHTML=xmlhttp.responseText;
               Risultato = xmlhttp.status;
     	  }
     	  else
              {  alert("Problem retrieving XML data: " + xmlhttp.statusText);
    	  }
     	}
     }
    Uno spunto ...
    HTH
    Zappa
    [PC:Presario 2515EU][Cpu:P4@2.3GHz][Ram: 512M][HDU:80G@5400 RPM]
    [Wireless:LinkSys][OS: Ubuntu 9.04 - Jaunty Jackalope]

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    3

    SQL Server

    Il SQL Server stà all'interno del dominio, comunque in ogni caso del caricamento della lista dal db se ne occupa Sharepoint.

    Cmq ringrazio, stasera appena posso ci provo subito e poi vi faccio sapere!!




  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    3

    Non funziona!

    Ho provato a modificare lo script Javascript come consigliato ma funziona in modalità alquanto strana.
    Riporto di seguito il codice modificato:
    codice:
    var xmlhttp;
    var Risultato = -1; 
    
    function GenerateLinkDocument(id) {
        var idtable,beginwith,namefiledocument,extension;
        idtable=id;
    	extension='.pdf';
        if (idtable < 10) 
        { beginwith='d' + String('000'); } 
        else  if (idtable < 100) { beginwith='d'+ String('00'); } 
              else  if (idtable < 1000) { beginwith='d'+ String('0'); } 
                    else  if (idtable < 10000) { beginwith='d'; }
        namefiledocument = beginwith + idtable + extension;
        return namefiledocument;
    }
    
    function ResultTestDoc(url) {
    	 loadXMLDoc(url);
    	 do {
    	 	if (Risultato==200) { window.open(url); }
    	 	else { alert('File doesn\'t exist!'); }
    	 } while (Risultato==-1); 
    }
    
    function loadXMLDoc(url) {
    	xmlhttp=null;
    	if (window.XMLHttpRequest) // code for IE7, Firefox, Opera, etc.
    		{ xmlhttp=new XMLHttpRequest(); }
    	else if (window.ActiveXObject) // code for IE6, IE5
    		{ xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); }
    	if (xmlhttp!=null)
    	{
    	xmlhttp.onreadystatechange=state_Change;
    	xmlhttp.open("GET",url,true);
    	xmlhttp.send(null);
    	}
    	else
    	{ alert("Your browser does not support XmlHTTPRequest."); }
    }
    
    function state_Change() {
    	if (xmlhttp.readyState==4)
    	  {// 4 = "loaded"
    	  if (xmlhttp.status==200) 
    	  {// 200 = "OK" 404 = "File non found"
    	    document.getElementById('A1').innerHTML=xmlhttp.status;
    	    Risultato = xmlhttp.status;
    	  }
    	  else {
    	    alert("Problem retrieving XML data: " + xmlhttp.statusText);
    	    Risultato = xmlhttp.status;
    	  }
    	}
    }
    All'interno della funzione ResultTestDoc(url) non viene richiamata la variabile Risultato, la variabile rimane =-1, assume il valore giusto solamente se inserisco un Alert(Risultato) e comunque lo assume solamente al secondo giro del ciclo ... non riesco proprio a capire!!

    Vi prego aiutatemi!!

  6. #6
    Fai cos&igrave;:

    codice:
    var oTimer;			// il timer
    var called = false;	// se ho gia' chiamato la ResultTestDoc
    function ResultTestDoc(url) {
    	 if (!called) {	// E' la prima volta: chiamo Ajax
    	 	 loadXMLDoc(url);
    	 	 called = true;
    	 	 oTimer = setInterval(function(){ResultTestDoc(url);},100); // richiamo me stessa ...
    	 }
    	 else {
    		 if (Risultato==-1) 	// Risultato e' ancora -1: aspetto il prox ciclo!
    			return;
    	 	 clearInterval(oTimer);	// Risultato non e' -1: ho finito
    		 called = false;		// resetto called
    	 	 if (Risultato==200) { 	// testo Risultato
    	 	 	 window.open(url); 
    	 	 }
    	 	 else { 
    	 	 	 alert('File doesn't exist!'); 
    	 	 }
    	 } 
    }
    Per me dovrebbe funzionare.
    Tieni presente che una chiamata Ajax &egrave; asincrona, quindi il risultato lo hai DOPO che la risposta del server &egrave; arrivata, e, intanto che arriva, il javascript continua la sua esecuzione, quindi Risultato non pu&ograve; essere controllato!
    (la mia spiegazione fa acqua da tutte le parti ....)

    HTH
    Zappa
    [PC:Presario 2515EU][Cpu:P4@2.3GHz][Ram: 512M][HDU:80G@5400 RPM]
    [Wireless:LinkSys][OS: Ubuntu 9.04 - Jaunty Jackalope]

  7. #7
    alert('File doesn't exist!');

    qui c'è un apostrofo non backslashato

    alert('File doesn\'t exist!');

    -----

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.