Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    160

    document.write() non scrive nulla

    Ciao a tutti!!

    Sono un perfetto newbie di Javascript. Ho trovato uno script ed ho cercato di adattarlo alle mie esigenze. Lo script è il seguente:

    codice:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <html>
    <head>
    <script type="text/javascript">
    function geolocate(timezone, cityPrecision, objectVar) {
     
      var api = (cityPrecision) ? "ip_query.php" : "ip_query_country.php";
      var domain = 'ipinfodb.com';
      var url = "http://" + domain + "/" + api + "?output=json" + ((timezone) ? "&timezone=false" : "&timezone=false" ) + "&callback=" + objectVar + ".setGeoCookie";
      var geodata;
      var callbackFunc;
      var JSON = JSON || {};
     
      // implement JSON.stringify serialization
      JSON.stringify = JSON.stringify || function (obj) {
        var t = typeof (obj);
        if (t != "object" || obj === null) {
          // simple data type
          if (t == "string") obj = '"'+obj+'"';
            return String(obj);
        } else {
        // recurse array or object
          var n, v, json = [], arr = (obj && obj.constructor == Array);
          for (n in obj) {
            v = obj[n]; t = typeof(v);
            if (t == "string") v = '"'+v+'"';
            else if (t == "object" && v !== null) v = JSON.stringify(v);
            json.push((arr ? "" : '"' + n + '":') + String(v));
          }
          return (arr ? "[" : "{") + String(json) + (arr ? "]" : "}");
        }
      };
     
      // implement JSON.parse de-serialization
      JSON.parse = JSON.parse || function (str) {
        if (str === "") str = '""';
          eval("var p=" + str + ";");
          return p;
      };
     
      //Check if cookie already exist. If not, query IPInfoDB
      this.checkcookie = function(callback) {
        geolocationCookie = getCookie('geolocation');
        callbackFunc = callback;
        if (!geolocationCookie) {
          getGeolocation();
        } else {
          geodata = JSON.parse(geolocationCookie);
          callbackFunc();
        }
      }
     
      //API callback function that sets the cookie with the serialized JSON answer
      this.setGeoCookie = function(answer) {
        if (answer['Status'] == 'OK') {
          JSONString = JSON.stringify(answer);
          setCookie('geolocation', JSONString, 365);
          geodata = answer;
          callbackFunc();
        }
      }
     
      //Return a geolocation field
      this.getField = function(field) {
        try {
          return geodata[field];
        } catch(err) {}
      }
     
      //Request to IPInfoDB
      function getGeolocation() {
        try {
          script = document.createElement('script');
          script.src = url;
          document.body.appendChild(script);
        } catch(err) {}
      }
     
      //Set the cookie
      function setCookie(c_name, value, expire) {
        var exdate=new Date();
        exdate.setDate(exdate.getDate()+expire);
        document.cookie = c_name+ "=" +escape(value) + ((expire==null) ? "" : ";expires="+exdate.toGMTString());
      }
     
      //Get the cookie content
      function getCookie(c_name) {
        if (document.cookie.length > 0 ) {
          c_start=document.cookie.indexOf(c_name + "=");
          if (c_start != -1){
            c_start=c_start + c_name.length+1;
            c_end=document.cookie.indexOf(";",c_start);
            if (c_end == -1) {
              c_end=document.cookie.length;
            }
            return unescape(document.cookie.substring(c_start,c_end));
          }
        }
        return '';
      }
    }
     
    </script>
    </head>
    <body>
    <script type="text/javascript">
    var MonthsOfYear = new Array(12);
    		MonthsOfYear[0] = "Gennaio";
    		MonthsOfYear[1] = "Febbraio";
    		MonthsOfYear[2] = "Marzo";
    		MonthsOfYear[3] = "Aprile";
    		MonthsOfYear[4] = "Maggio";
    		MonthsOfYear[5] = "Giugno";
    		MonthsOfYear[6] = "Luglio";
    		MonthsOfYear[7] = "Agosto";
    		MonthsOfYear[8] = "Settembre";
    		MonthsOfYear[9] = "Ottobre";
    		MonthsOfYear[10] = "Novembre";
    		MonthsOfYear[11] = "Dicembre";
    
    var visitorGeolocation = new geolocate(false, true, 'visitorGeolocation');
    var callback = function(){ 
    	var cityName = visitorGeolocation.getField('City');
    	var Digital = new Date();
    	var mday = Digital.getDate();
    	var month = Digital.getMonth();
    	var year = Digital.getFullYear();
    	var hours = Digital.getHours();
    	var h = parseInt(hours);
    	if (h <= 9) hours = "0" + hours; 
    	var minutes = Digital.getMinutes();
    	var m = parseInt(minutes);
    	if (m <= 9) minutes = "0" + minutes; 
    	var myclock = cityName + ', ' + mday + ' ' + MonthsOfYear[month] + ' ' + year + '
    ' + 'ore' + ' ' + hours + '.' + minutes;
    	document.write(myclock + ' Festività');
    };
    visitorGeolocation.checkcookie(callback); 
    </script>
    </body>
    </html>
    Il problema è che document.write() non stampa nulla in quella funzione di callback, mente se per esempio metto alert al posto di document.write, mi appare la scritta. Non capisco perché.

  2. #2
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    Non puoi usare document.write() all'interno di una funzione che non sia eseguita durante il rendering della pagina... come minimo non saprebbe in quale punto scrivere, di solito fa sparire tutto il resto della pagina per sostituirlo con l'argomento del metodo.

    Documentati su "innerHTML" e usalo

    ciao
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    160
    Ho provato ora ad utilizzare innerHTML sostituendo a document.write() il seguente codice:

    codice:
    var body = document.getElementsByTagName("body");
    body.innerHTML = '
    
    ' + myclock + ' Festività</p>';
    Non scrive nulla lo stesso

  4. #4
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Se l'hai scritto pari-pari cosi senza modificare nient'altro nello script, probabilmente e per inserisci due body nel documento. Prova a spostare tutto lo script(anche quello nel body) nella head e al posto della riga document.write metti document.getElementById('festivita').innerHTML='

    ' + myclock + ' Festività</p>'; e nel body al posto dello script metti <div id="festivita"></div>
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    160
    Grazie, ma niente da fare ancora. Non stampa niente. Non va né su IE né su Chrome, però su IE mi restituisce questo errore:

    codice:
    Dettagli errore pagina Web
    
    Agente utente: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET CLR 1.1.4322; .NET4.0C; Creative AutoUpdate v1.40.01)
    Timestamp: Sat, 23 Oct 2010 18:16:43 UTC
    
    
    Messaggio: Proprietà o metodo non supportati dall'oggetto
    Linea: 131 (è la linea dove ho inserito document.getElementsById('festivita').innerHTML = '
    
    ' + myclock + ' Festività</p>';)
    Carattere: 2
    Codice: 0
    URI: file:///C:/Users/Emanuele/Desktop/script.html

  6. #6
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    A) Sicuro che lo script vada?
    B) Possibile vedere lo script online in una pagina pubblica?
    C) Se le pagine le provi cosi: file:///C:/Users/Emanuele/Desktop/script.html potresti avere problemi non avendo un web-server attivo (IIS/APACHE) meglio pubblicare in uno spazio free oppure installare un web-server.
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  7. #7
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    160
    A) Il problema è dovuto tutto al fatto che mi serve prendere la città tramite quel servizio di geolocation e quindi ho dovuto fare un po' un accrocco ... Se conosci un altro modo in javascript per prendere la città dell'utente mi salveresti...

    B) e C) Potrei utilizzarlo su una macchina che utilizza Microsoft Sharepoint. Ora lo proverò lì.

  8. #8
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    160
    B) e C) Potrei utilizzarlo su una macchina che utilizza Microsoft Sharepoint. Ora lo proverò lì.
    Niente, appena provato neanche lì funziona. E' per questo che prima vorrei appurare che funzioni come una semplice pagina html.

  9. #9
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Secondo me stai provando di fare qualcosa complicata per un esperto, e con pochi mezzi e conoscenze, valuta l'ipotesi di rinunciare, rischi di perdere solo tempo, e l'unico consiglio che mi viene di darti viste le informazioni e fatti.
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  10. #10
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    160
    Si è vero quello che dici.

    Ma tu per caso conosci un altro servizio di geolocation free che si interfaccia un po' più facilmente rispetto a questo?

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.