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

    Problema con select dinamica su Internet Explorer

    Salve ho un problema con una select dinamica che mi si verifica soltanto su internet explorer, su firefox funziona tutto bene tranne una cosina che vi chiederò dopo.

    questo è il codice:
    Codice PHP:
    // Questa funzione serve a prendere un oggetto di tipo HTTPObject per passare i valori al server
    function getHTTPObject(){
      if (
    window.ActiveXObject
        return new 
    ActiveXObject("Microsoft.XMLHTTP");
      else if (
    window.XMLHttpRequest
        return new 
    XMLHttpRequest();
      else {
        
    alert("Your browser does not support AJAX.");
        return 
    null;
      }
    }


    function 
    populateSelect(){
        
    alert('sono qui');
       
    marcauto document.getElementById('menumarca').value;
       
    httpObject getHTTPObject();
       var 
    Math.random();
       if (
    httpObject != null) {
         
    httpObject.open("GET""selectphp.php?MARCA=" marcauto "&RAND=" +escape(r), true);
         
    httpObject.send(null);
         
    alert ("ho finito la chiamata Ajax");
         
    populate();
      }
    }
                
    function 
    populate(){
       var 
    myArr = [];
       if(
    httpObject.readyState == 4){
            var 
    lista httpObject.responseText;
       }
       
    lista lista.replace(/\'/g,"");
       alert('
    lista '+lista);
       myArr = lista.split( /,/);
          alert('
    myArr '+myArr);
       var i;
       var content = "";
       for(i = 0; i < myArr.length; i++){
            content += '
    <option value="'+myArr[i]+'">'+myArr[i]+"</option>n";
       }
       document.getElementById("veicolouniv").innerHTML = content;

    ha messo dei vari alert sulla funzione populate() e noto che l'array anche su explorer viene costruito bene, il problema è quando deve andare a ficcare content nelle opzioni del menù a selezione, mentre su FF funge tutto, in IE non scrive le opzioni.

    AVETE QUALCHE IDEA?

    dovrebbe essere in document.getElementById("veicolouniv").innerHTML = content; il problema.

    Inoltre un'altra cosa, tornando sulla chiamata ad Ajax che sta nella prima funzione ossia in populateSelect(), ho uno strano comportamento. Con quell' alert ("ho finito la chiamata Ajax"); mi funge, se tolgo l'alert... non fa + niente. Come posso risolvere?

    allego il codice della pagina php chiamata:

    Codice PHP:
    <?php include('Connections/mysql.php'); ?>

    <?php
    mysql_select_db
    ($database_mysql$mysql);
        if (isset(
    $_GET['MARCA'])) {
                    
    $marca $_GET['MARCA'];
                    
    $query_Recordset1 "SELECT vettureuniversali.modello FROM vettureuniversali WHERE marca = '".$marca."'";
                    
    $Recordset1 mysql_query($query_Recordset1$mysql) or die(mysql_error());
                    
    $ret ''
                    while(
    $row_Recordset1 mysql_fetch_assoc($Recordset1)) 
                    { 
                    
    $ret .="'".$row_Recordset1['modello']."',"
                    }
                    if(
    strlen($ret) > 0){ 
                        
    $ret substr($ret0strlen($ret) - 1); 
                    } 
                    echo 
    "$ret"
                    
    mysql_free_result($Recordset1);
        }
    ?>

  2. #2
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924
    il problema su IE dovrebbe dipendere dal fatto che stai aggiungendo le options con innerHTML anzichè con i metodi createElement() e appendChild()

    prova a cambiare così

    codice:
    // immagino che la select esista già (anche vuota) nel codice
    var tuaselect = document.getElementById("veicolouniv");
    
    for(i = 0; i < myArr.length; i++){
         var opt = document.createElement('option');
         opt.value = myArr[i];
         opt.text = myArr[i];
         opt.innerHTML = myArr[i];
         tuaselect.appendChild(opt);
    }
    
    // document.getElementById("veicolouniv").innerHTML = content;
    Vuoi aiutare la riforestazione responsabile?

    Iscriviti a Ecologi e inizia a rimuovere la tua impronta ecologica (30 alberi extra usando il referral)

  3. #3

    Grande...

    Grazie davvero, questo problema l'ho risolto ma visto che sei così preparato ti sfrutto ancora un pò e poi ti lascio in pace .

    Riguardo al fatto di cui parlavo dopo in cui una parte del codice mi si esegue solo mettendo l'alert ? Conta che questa cosa l'ho scoperta facendo un pò di debug altrimenti non avrei mai immaginato che mettendo quell' alert ("ho finito la chiamata Ajax"); avesse funzionato. Hai qualche idea sul perchè?

    E poi un ultima cosa, già ho posto questo problema su questo forum ma nn ho avuto risposte: in pratica mi accade questo:
    vorrei chiamare delle funzioni javascript in cascata dentro una funzione javascript con la particolarità che ognuna delle sottofunzioni contiene una chiamata Ajax. Beh il risultato è che mi si esegue soltanto la prima in ordine e poi non va avanti.

    Codice PHP:
    var misur;
    var 
    semie;
    var 
    tappe;
    var 
    copri;

    function 
    setListini(id) {
      
    misur document.getElementById(id+'.LIST_MISUR').value;
      
    semie document.getElementById(id+'.LIST_SEMIE').value;
      
    tappe document.getElementById(id+'.LIST_TAPPE').value;
      
    copri document.getElementById(id+'.LIST_COPRI').value;
      
    getTappetini();
      
    getFoderineSuMis();
    }

    function 
    getTappetini() {
      
    modellotap document.getElementById('menutappetini').value;
      
    httpObject getHTTPObject();
      var 
    Math.random();
      if (
    httpObject != null) {
        
    httpObject.open("GET""elabora.php?TAP=" tappe +"&NAME=" modellotap "&RAND="+escape(r), true);
        
    httpObject.send(null);
        
    httpObject.onreadystatechange setOutputTappetini;
      }
    }

    function 
    getFoderineSuMis() {
      
    modellomis document.getElementById('menufoderinesumis').value;
      
    httpObject getHTTPObject();
      var 
    Math.random();
      if (
    httpObject != null) {
        
    httpObject.open("GET""elabora.php?MIS=" misur +"&NAME=" modellomis "&RAND="+escape(r), true);
        
    httpObject.send(null);
        
    httpObject.onreadystatechange setOutputFoderineSuMis;
      }

    ad esempio se sull'evento onclick di un radiobutton metto "setListini(id);" mi parte la funzione setListini(id) e si esegue fino al getTappetini(); poi tutto ciò ke c'è dopo non viene più portato a termine e addirittura ho notato che anche mettendo un alert dopo quel getTappetini(); non lo visualizza.

    Le altre funzioni sono tutte corrette perchè cmq ad esempio commentando la getTappetini(); e lasciando decommentata l'altra, mi esegue l'altra e poi niente +, tieni conto che ne sono 4 in cascata.

    Come potrei risolvere?

  4. #4

    TUTTO RISOLTO

    Grazie, ho risolto

  5. #5
    ottimo, una osservazione guardando questo codice..

    codice:
    function populateSelect(){ 
        alert('sono qui'); 
       marcauto = document.getElementById('menumarca').value; 
       httpObject = getHTTPObject(); 
       var r = Math.random(); 
       if (httpObject != null) { 
         httpObject.open("GET", "selectphp.php?MARCA=" + marcauto + "&RAND=" +escape(r), true); 
         httpObject.send(null); 
         alert ("ho finito la chiamata Ajax"); 
         populate(); 
      } 
    }
    perchè chiami in cascata il metodo populate? questo potrebbe non aver ancora finito (ad esempio se provi in ambiente remoti o caricati da richieste..) se non l'hai fatto io metterei il contenuto di populate() dentro l'onreadystatechange ..

    probabilmente con alert funzionava perchè dava il tempo di eseguire era come una attesa a eseguire il populate..

    ciao

  6. #6

    Grazie della precisazione

    Grazie della precisazione, comunque in realtà lo chiamavo proprio come dici te, poi avevo provato a chiamarlo così come riportato sopra pensando che il problema fossi lì. Adesso ho reimpostato la chiamata soltanto quando avviene il cambiamento di stato. Il problema cmq dipendeva tutto da un'overriding di metodi o function come vogliamo chiamarli.

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.