Avatar billede thorus Nybegynder
24. oktober 2008 - 17:53 Der er 19 kommentarer

Ajax dropdown mangler value

Jeg har en form med en dropdown som hentes via følgende kode:

------------------------
function getXMLHTTP() { //fuction to return the xml http object
        var xmlhttp=false;   
        try{
            xmlhttp=new XMLHttpRequest();
        }
        catch(e)    {       
            try{           
                xmlhttp= new ActiveXObject("Microsoft.XMLHTTP");
            }
            catch(e){
                try{
                xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
                }
                catch(e1){
                    xmlhttp=false;
                }
            }
        }
           
        return xmlhttp;
    }
   
   
   
    function getCity(strURL) {       
       
        var req = getXMLHTTP();
       
        if (req) {
           
            req.onreadystatechange = function() {
                if (req.readyState == 4) {
                    // only if "OK"
                    if (req.status == 200) {                       
                        document.getElementById('underkategoridiv').innerHTML=req.responseText;                       
                    } else {
                        alert("There was a problem while using XMLHTTP:\n" + req.statusText);
                    }
                }               
            }           
            req.open("GET", strURL, true);
            req.send(null);
        }
               
    }

------------------------

Data hentes ser sådan her ud

------------------------

?>
<select name="subkategori">
<option value="">Vælg underkategori</option>
<? while($row=mysql_fetch_array($result)) { ?>
<option value="<?=$row['id']?>"><?=$row['subnavn']?></option>
<? } ?>
</select>

------------------------

Mit problem er at value til name="subkategori" ikke kommer videre når jeg trykker submit.

DVS: at jeg ikke kan indsætte value i min database.

Skal man hente value på en speciel måde så den kommer med over når man trykker submit i ens form?

Koden kommer fra:
http://roshanbh.com.np/2007/12/change-dropdown-list-options-values-from-database-with-ajax-and-php.html
Avatar billede tjens Nybegynder
24. oktober 2008 - 18:28 #1
Prøv at sætte sourcen fra browseren herind, så vi kan se selecten som php'en spytter ud.
Avatar billede thorus Nybegynder
24. oktober 2008 - 18:36 #2
<div id="underkategoridiv">
<select name="subkategori">
<option value="">Vælg underkategori</option>
<option value="448">test</option>
<option value="449">test</option>
<option value="450">test</option>
<option value="451">test</option>
</select>
</div>
Avatar billede thorus Nybegynder
24. oktober 2008 - 18:37 #3
har også prøvede at printe alle variabler ud og der kommer subkategori ikke med

-----------
foreach($_REQUEST as $key => $val)
{
    echo $$key = $val;
}
-----------
Avatar billede tjens Nybegynder
24. oktober 2008 - 18:40 #4
Hmm.. og selecten er ikke havnet uden for <form>...</form> taggene?
Avatar billede thorus Nybegynder
24. oktober 2008 - 18:50 #5
nej, det er som om at den ikke er der.

Syntes jeg kan læse mig frem til at nogen har samme problem her
http://roshanbh.com.np/2007/12/change-dropdown-list-options-values-from-database-with-ajax-and-php.html
Avatar billede majbom Novice
24. oktober 2008 - 19:23 #6
kan du ikke paste hele sidens kode? eller bare lidt mere omkring din select, evt. hele formen...
Avatar billede thorus Nybegynder
24. oktober 2008 - 20:50 #7
Hele formen er ret stor, den virker fint, det eneste der ikke kommer med er subkategori value som hentes fra en anden PHP fil.

<form action=\"tilfoej.php\" method=\"post\" enctype=\"multipart/form-data\">
Avatar billede olebole Juniormester
25. oktober 2008 - 00:21 #8
<ole>

For det første har det ikke meget med Ajax at gøre. InnerHTML er en oldsag, der aldrig har været valid i nogen standard og hører hjemme i Netscape og Explorer 4 - tilbage i midthalvfemserne. I dag bør man bruge DOM.

Derudover giver det absolut ingen mening at udskrive og returnere HTML-formaterede data. Det suger mange gange de server resourcer, det kræver at JSON- eller XML-formatere de samme data. Og så har vi ikke engang talt om, at du ofte skal overføre en streng, som er 10-20 gange så lang, hvis du bruger HTML, end hvis du bruger JSON.

Prøv også at kikke på denne XMLHttpRequest wrapper:
    http://www.dengodekode.dk/artikler/ajax/xmlhttprequest_wrapper.php

- som er væsentligt bedre opdateret, end den du bruger nu. Jeg har endvidere lavet et par JSON-eksempler i denne tråd:
    http://www.eksperten.dk/spm/817625

/mvh
</bole>
Avatar billede olebole Juniormester
25. oktober 2008 - 00:23 #9
Derudover kalder du jo aldrig din funktion 'getCity'. Du har jo sløjfet artiklens onchange handler på select elementet  ;o)

Hvorfor bruger du i øvrigt 'mulitpart/form-data'?
Avatar billede majbom Novice
25. oktober 2008 - 07:36 #10
tror jeg har været træt da jeg læste tråden. har slet ikke lagt mærke til at din select ikke bliver "fyldt", men rent faktisk bliver returneret komplet vha ajax, hvilket, som ole siger, bestemt ikke er måden at gøre det på.
Avatar billede tjens Nybegynder
25. oktober 2008 - 10:35 #11
Jeg forstår ikke svaret på mit spørgsmål: "og selecten er ikke havnet uden for <form>...</form> taggene?"

Jeg prøver lige at illustrere, hvad jeg mener, de fleste andre, som har problemer med at følge artiklen, har gjort forkert:

<form>
  Alt det der allerede virker ... ...
</form>
<div id="underkategoridiv">
</div>

resultat af ovenstående: Kategorierne vises på skærmen, men er ikke med i formen.

Med andre ord, skal den html du includer via XMLHttpRequest havne inden for formen sådan her, før det kan virke:



<form>
  Alt det der allerede virker ... ...
  <div id="underkategoridiv">
  </div>
</form>
Avatar billede thorus Nybegynder
25. oktober 2008 - 11:08 #12
Det ser sådan her ud:

<form>
  Alt det der allerede virker ... ...
  <div id="underkategoridiv">
  </div>
</form>

Så det burde virke.

Nogen som har et link til en AJAX dropdown som virker?
Avatar billede majbom Novice
25. oktober 2008 - 11:38 #13
det er muligt at det burde virke, men det er bestemt ikke en særlig hensigtsmæssig måde at gøre det på.

du kan læse om json hér: http://www.json.org/ og returnere værdier og navne til selecten som json og så lave en tom select i din form, som så bliver fyldt med den hentede json-streng og java script:

var obj = document.getElementById('din_select');
obj.options[obj.options.length] = new Option('navn', 'værdi' ,true, false);
Avatar billede olebole Juniormester
25. oktober 2008 - 15:34 #14
Du kan jo ikke forvente, en funktion skal kunne udføre noget, når du aldrig kalder den. Jeg kan som sagt ikke se, du noget sted i den kode, du viser, kalder funktionen 'getCity'. I den artikel, du henviser til, sker det her:
    <select name="country" onchange="getCity('findcity.php?country='+this.value)">

- selvom der er en stavefejl i den oprindelige kode. På den anden side, er du jo yderst sparsom med dine informationer, så det er ikke til at vide, hvad der sker i resten af din kode  =)

Hvis du ikke er rigtig stiv i JavaScript og DOM, vil jeg absolut fraråde dig at rode med Ajax - og råde dig til at lære noget mere JavaScript og DOM i stedet  ;o)
Avatar billede thorus Nybegynder
26. oktober 2008 - 17:12 #15
Ved ikke om jeg har forklaret mig rigtigt.

1. Se på : http://roshanbh.com.np/2007/12/change-dropdown-list-options-values-from-database-with-ajax-and-php.html

2: Hvordan får jeg $city fra findcity.php til at blive vist når jeg trykker på en submit knap i min form. (Når jeg skriver echo $_GET['city']; kommer der intet)
Avatar billede olebole Juniormester
26. oktober 2008 - 19:30 #16
- og jeg ved ikke, om jeg tør tro på, du læser, hvad jeg skriver. Hvad er det præcist i vores indlæg, du ikke forstår?
Avatar billede tjens Nybegynder
28. oktober 2008 - 11:22 #17
Du skal vel ikke skrive $_GET['city'] i den PHP-fil, der modtager form-data.

Din variable select (fra XMLhttpRequest) hedder subkategori i formen, så prøv med $_GET['subkategori']
Avatar billede thorus Nybegynder
28. oktober 2008 - 12:18 #18
Blev nød til at droppe denne måde og bruger i stedet den gamle reload side metode, desværre.

Har bare ikke tid pt. til at fordybe mig i javascript og DOM m.m.
Avatar billede majbom Novice
28. oktober 2008 - 12:38 #19
det er helt i orden, bare husk at luk spørgsmålet...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester