2010-07-27 4 views
0

J'essaie de créer une liste chaînée ici. Je veux que l'utilisateur choisisse quelque chose dans la liste déroulante 4 et une fois que le dernier est choisi, un autre est censé apparaître. Je ne fais que tester mon code maintenant et pour une raison quelconque, mes codes ne montrent pas la liste déroulante qui est censée être affichée lorsque la dernière entrée est modifiée.S'il vous plaît aidez-moi avec cet ajax/javascript/php

Ceci est mon script java

function GetXmlHttpObject(){ 
    var objXMLHttp = null; 
    if(window.XMLHttpRequest){ 
     objXMLHttp = new XMLHttpRequest(); 
    }else if(window.ActiveXObject){ 
     objXMLHttp=new ActiveXObject("Microsoft.XMLHTTP") 
    } 
    return objXMLHttp; 
} 

function stateChanged(n){ 
    if(xmlHttp.readyState == 4 || xmlHttp.readyState == "complete"){ 
     alert(xmlHttp.responseText); 
     document.getElementById("yearSelect").innerHTML = xmlHttp.responseText; 
    } 
} 
function showTest(v,p,r){ 
    alert("HI"); 
} 

function showBoxes(v,p,r){ 
    xmlHttp=GetXmlHttpObject(); 
    url=""; 
    if(v == 1){ 
     //by year 
     xmlHttp.onreadystatechange=stateChanged("yearSelect"); 
     url = 'result.php?sid=' + Math.random() + '&type=1&product=' + p + '&vendor=' + r; 

    }else if(v == 2){ 
     xmlHttp.onreadystatechange=stateChanged("monthSelect"); 
     url = 'result.php?sid=' + Math.random() + '&type=2&product=' + p + '&vendor=' + r; 
     //by month 
    }else if(v == 3){ 
     xmlHttp.onreadystatechange=stateChanged("weekSelect"); 
     url = 'result.php?sid=' + Math.random() + '&type=3&product=' + p + '&vendor=' + r; 
     // by week 
    } 
    //url.replace(" ","%20"); <-- Do I need to do this? 
    alert(url); 
    xmlHttp.open("GET",url,true); 
    xmlHttp.send(); 
} 

Ceci est mon result.php. À l'heure actuelle, il est très simple, il retourne juste les balises de sélection.

<?php 
     ?> 
     <select> 
      <option value=2001>2001</option> 
     </select> 
     <?php 
    ?> 

Ceci est la première chose que voit l'utilisateur. Il y a une méthode php qui est utilisée ici comme getClients() elle met juste quelques trucs dans le menu déroulant.

<html> 
    <head> 
     <title>LeadQual Reporting</title> 
     <script language="javascript" src="../lqcharts/fusioncharts_js/FusionCharts.js"></script> 
     <script language="javascript" src="ajax.js"></script> 
    </head> 

    <body> 
     <div> 

      <form method='post' action='result.php'> 

       <select name ='client'> 
       <?php 
        $clients = ChartData::getClients(); 
        foreach($clients as $k){ 
         echo "<option value='$k'>$k</option>"; 
        } 
       ?> 
       </select> 
       <br/> 

       <select name="products" id="productsResult"> 
        <option> 
        <?php 
         $products = ChartData::getProducts(); 
         foreach($products as $p){ 
          echo "<option value='$p'>$p</option>"; 
         } 
        ?> 
        </option> 
       </select> 
       <br/> 

       <select name="vendors" id="vendorsResult"> 
        <option> 
        <?php 
         $vendors = ChartData::getVendors(); 
         foreach($vendors as $v){ 
          echo "<option value='$v'>$v</option>"; 
         } 
        ?> 
        </option> 
       </select> 
       <br/> 
       <select name="view" id="chooseView" onchange="showBoxes(this.value, document.getElementById('productsResult').value, document.getElementById('vendorsResult').value)"> 
        <option value=0>Select Option</option> 
        <option value=1>By Year</option> 
        <option value=2>By Month</option> 
        <option value=3>By Week</option> 
       </select> 

       <div id="yearSelect"> 

       </div> 

       <div id="monthSelect"> 

     </div> 

     <div id="weekSelect"> 

     </div> 

      </form> 
     </div> 
     <div> 
     </div> 
    </body> 
</html> 

Répondre

0

J'ai remarqué dans 2 de vos listes de sélection que vous avez l'option dans les options

<select name="vendors" id="vendorsResult"> 
        <option> 
        <?php 
         $vendors = ChartData::getVendors(); 
         foreach($vendors as $v){ 
          echo "<option value='$v'>$v</option>"; 
         } 
        ?> 
        </option> 
       </select> 

devrait être:

<select name="vendors" id="vendorsResult"> 
        <?php 
         $vendors = ChartData::getVendors(); 
         foreach($vendors as $v){ 
          echo "<option value='$v'>$v</option>"; 
         } 
        ?> 
       </select> 

Aussi je viens d'avoir une analyse rapide à travers votre code, je ne peux pas voir où vous ciblez un div pour votre contenu ajax à apparaître: - | Si vous utilisez Firebug, un plugin pour Firefox, vous verrez si votre appel ajax fonctionne.

également pour votre appel AJAX, pourquoi ne pas utiliser JQuery, un il rend votre code clair, deux, vous pouvez sélectionner où vous voulez que votre contenu ajax apparaît.

http://api.jquery.com/category/ajax/

+0

merci de souligner que out =) – denniss

Questions connexes