Avatar billede 44fire44 Nybegynder
24. juni 2008 - 17:39 Der er 36 kommentarer og
1 løsning

_GET-funktion i javascript?

Hej eksperter

Er det muligt at lave en form for "_GET"-lignende funktion i javascript som henter to variabler fra URLén ind i to formular-felter?

(problemet er at jeg ikke kan benytte serversideprogrammering i systemet, og leder derfor efter et lavascript der kan opfylde mine behov

Hvis vi antager vi har en URL her:

http://www.side.dk/default.aspx?ID=102&fornavn=Peter&efternavn=Jensen


Så vil jeg gerne have når en person trykker på linket, så skal felterne "Fornavn" og "Efternavn" i min formular udfyldes med det navn som der nu er skrevet i den pågældende URL - i dette tilfælde "Peter" og "Jensen"

Er dette muligt?
Mvh
5x4
Avatar billede w13 Novice
24. juni 2008 - 18:08 #1
Der er ingen indbygget funktion til dette i JavaScript, men der er masser af folk, der har lavet deres egne, f.eks. her: http://ilovethecode.com/Javascript/Javascript-Tutorials-How_To-Easy/Get_Query_String_Using_Javascript.shtml

Det var bare første hit ud af over 1 mio., som jeg fandt ved at søge på "javascript get querystring": http://www.google.com/search?q=javascript+get+querystring
Avatar billede w13 Novice
24. juni 2008 - 18:10 #2
Du kan f.eks. bruge denne funktion:

function getQueryVariable(variable){
  var query=window.location.search.substring(1);
  var vars=query.split("&");
  for(var i=0;i<vars.length;i++){
    var pair=vars[i].split("=");
    if(pair[0]==variable)return pair[1];
  }
}

Jeg har ikke testet den, men det skulle med den være muligt at hente en querystring ved at skrive:

alert(getQueryVariable("variablenavn"));
Avatar billede 44fire44 Nybegynder
24. juni 2008 - 18:35 #3
se, det virker jo fint :) - men hvordan smider jeg getQueryVariable("variablenavn") ind i en input-type?

<input type="text" name="navn" value=""> - går ikke ud fra at jeg bare kan smide <script>-tags ind i feltet ;)
Avatar billede w13 Novice
24. juni 2008 - 18:38 #4
Nej, det er rigtigt. :) Du vil have den i value, siger du?

F.eks.:

<script type="text/javascript">
function getQueryVariable(variable){
  var query=window.location.search.substring(1);
  var vars=query.split("&");
  for(var i=0;i<vars.length;i++){
    var pair=vars[i].split("=");
    if(pair[0]==variable)return pair[1];
  }
}
</script>

<input type="text" id="navn" name="navn">

<a href="java script:document.getElementById('navn').value=getQueryVariable("variablenavn");void(0)">Klik her</a>

Her sker det ved klik på link. Hvis det ikke skal ske ved klik, men ligeså snart siden loader, så ret A-tag'et til:

<script type="text/javascript">
document.getElementById('navn').value=getQueryVariable("variablenavn");
</script>
Avatar billede 44fire44 Nybegynder
24. juni 2008 - 18:48 #5
takker ;) - præcis det jeg skulle bruge :)
Avatar billede w13 Novice
24. juni 2008 - 18:53 #6
Og tak for point! :)
Avatar billede olebole Juniormester
24. juni 2008 - 20:18 #7
<ole>

- eller:

function getVar(sKey) {
    if (!location.search) return undefined;
    var oRX = new RegExp("(?:\\?|&)"+sKey+"=(.*?)(?:&|$)", "i");
    var aM = location.search.match(oRX);
    return aM ? decodeURIComponent(aM[1]) : undefined;
}

/mvh
</bole>
Avatar billede mclemens Nybegynder
24. juni 2008 - 20:38 #8
Eller
<script type="text/javascript">
window.onload=function(){
  vars=window.location.search.replace(/\+/g," ").substr(1).split("&");
  for(i=0;i<vars.length;i++){vars2=vars[i].split("=");
  if(elm=document.getElementsByName(unescape(vars2[0]))[0])elm.value=unescape(vars2[1]);}
}
</script>

... Hvis GET objectet skal med så måske:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"><title>Ingen titel</title>

<script type="text/javascript">
var _GET={}; /* global object til opbevaring af dokument variabler... */

window.onload=function(){
  vars=window.location.search.replace(/\+/g," ").substr(1).split("&");
  for(i=0;i<vars.length;i++){
    vars2=vars[i].split("=");_GET[unescape(vars2[0])]=unescape(vars2[1]);
    if(elm=document.getElementsByName(unescape(vars2[0]))[0])elm.value=unescape(vars2[1]);
  }
}
</script>


</head><body>
<form method="get" action="4.html">
<input type="text" name="hest" value="værdi for get hest"><br>
<input type="text" name="hund" value="værdi for get hund"><br>
<input type="submit" value="Afsend">
</form>

<b onclick="alert(_GET['hest']);">Alert hest</b>
</body></html>
Avatar billede mclemens Nybegynder
24. juni 2008 - 20:47 #9
if (!location.search) return undefined;
er vist overflødig i Ole's ...

Ole snakkede vi ikke på et tidspunkt om at location.search altid
ville være tilgængelig og man ikke behøvede sikkerhedsteste ?
Eller husker jeg forkert og kan der ske fejl på det punkt ?
Avatar billede mclemens Nybegynder
24. juni 2008 - 20:59 #10
Foresten i 24/06-2008 20:38:58 er .replace(/\+/g," ")
for at undgå at hej+med+dig vises som i url'en i value.
og unescape er for at konvertere evt. urlencodede tegn retur.
Avatar billede olebole Juniormester
24. juni 2008 - 21:24 #11
escape og unescape har været deprecated i en del år, efterhånden  =)

encodeURI, encodeURIComponent, decodeURI og decodeURIComponent har afløst dem. Det betyder også, at iso-8859-1 defacto er deprecated og afløst af utf-8.
Avatar billede mclemens Nybegynder
24. juni 2008 - 21:28 #13
Oki, takker, hvad med search'en ?
Avatar billede olebole Juniormester
24. juni 2008 - 21:31 #14
Jamen, jeg spørger ikke på location.search for at undgå fejl, men for at undgå spild  =)
Avatar billede mclemens Nybegynder
24. juni 2008 - 21:33 #15
Nåh, ok =)
Avatar billede olebole Juniormester
24. juni 2008 - 21:34 #16
Hvis ikke location.search indeholder noget, er der jo ikke grund til at starte en søgning for at returnere undefined. Så kan vi ligeså godt returnere undefined med det samme  ;o)
Avatar billede 44fire44 Nybegynder
25. juni 2008 - 13:31 #17
Takker for inputs ;)

- men nu har jeg så valgt at bruge w13s eksempel

Hvis jeg nu undlader at lave 2 variabler, så står der bare "undefined" i mine inputbokse

Hvordan undgår jeg dette, så de bare er tomme, hvis der ikke er angivet noglt?
Avatar billede w13 Novice
25. juni 2008 - 13:33 #18
Så bruger du bare:

var string1 = getQueryVariable("variablenavn");

if(string1){
  inputboksen = string1;
}

eller:

inputboksen = string1 ? string1 : "";
Avatar billede 44fire44 Nybegynder
25. juni 2008 - 13:42 #19
<script type="text/javascript">
var string1 = getQueryVariable("variablenavn");

if(string1){
  inputboksen = string1;
}

document.getElementById('navn').value=getQueryVariable("variablenavn");
</script>

sådan der?
Avatar billede 44fire44 Nybegynder
25. juni 2008 - 14:02 #20
mit link ser sådan ud

http://www.side.dk/default.aspx?ID=102&fornavn=Peter&efternavn=Jensen

dvs jeg har en variabel inden jeg henter variablerne til inputfelterne. 2. del af mit java-script der så således ud:

<script type="text/javascript">
document.getElementById('fornavnnavn').value=getQueryVariable("fornavn");
document.getElementById('efternavn').value=getQueryVariable("efternavn");
</script>
Avatar billede 44fire44 Nybegynder
25. juni 2008 - 14:36 #21
hvad skal jeg så bruge i det tilfælde?

var string1 = getQueryVariable("fornavn");
var string2 = getQueryVariable("efternavn");

if(string1){
  fornavn = string1;
}
if(string2){
  efternavn = string2;
}

sådan noget lignende?
Avatar billede w13 Novice
25. juni 2008 - 14:36 #22
Nej, sådan her:

<script type="text/javascript">
var sQuery="";
sQuery=getQueryVariable("fornavn");
if(sQuery){
  document.getElementById('fornavnnavn').value = sQuery;
}

sQuery=getQueryVariable("efternavn");
if(sQuery){
  document.getElementById('efternavn').value = sQuery;
}
</script>

Hvis det da er meningen, der skal stå "fornavnnavn" - ellers må du lige rette det.
Avatar billede w13 Novice
25. juni 2008 - 14:39 #23
Først henter vi fornavn-variablen over i variablen sQuery! Så har vi den liggende dér, så vi ikke skal køre getQueryVariable("fornavn") igen flere gange for at hente "fornavn" ned. Det gøres med:
sQuery=getQueryVariable("fornavn");

Og med:
if(sQuery)
tjekker vi, om sQuery indeholder noget. Det er i stedet for at skrive:
if(sQuery==true)
som igen svarer til:
if(sQuery!="")
dvs. ikke blank!
Avatar billede 44fire44 Nybegynder
25. juni 2008 - 14:48 #24
kanon ;) - nu spiller det som det skal :)

Takker endnu engang ;) - nu kan jeg godt se meningen med det
Avatar billede 44fire44 Nybegynder
28. juni 2008 - 19:50 #25
så dukkede der lige endnu et problem op :P

Hvad skal jeg gøre for at et mellemrum forbliver et mellemrum - hvis nu personen har flere fornavne

http://www.side.dk/default.aspx?ID=102&fornavn=Hans Peter&efternavn=Jensen

så bliver Hans Peter til Hans%20Peter - hvordan for jeg det til at forblive "Hans Peter"?
Avatar billede w13 Novice
28. juni 2008 - 20:47 #26
Det kan du ikke. Men det skulle da meget gerne blive afkodet, når du henter det ned med Request.Querystring.

Ellers kan du vel bruge denne funktion, når det er hentet ned:

Function URLDecode(sConvert)
    Dim aSplit
    Dim sOutput
    Dim I
    If IsNull(sConvert) Then
      URLDecode = ""
      Exit Function
    End If
   
    ' convert all pluses to spaces
    sOutput = REPLACE(sConvert, "+", " ")
   
    ' next convert %hexdigits to the character
    aSplit = Split(sOutput, "%")
   
    If IsArray(aSplit) Then
      sOutput = aSplit(0)
      For I = 0 to UBound(aSplit) - 1
        sOutput = sOutput & _
          Chr("&H" & Left(aSplit(i + 1), 2)) &_
          Right(aSplit(i + 1), Len(aSplit(i + 1)) - 2)
      Next
    End If
   
    URLDecode = sOutput
End Function
Avatar billede w13 Novice
28. juni 2008 - 20:47 #27
Aaah, vi er i JavaScript! 2 sek. :P
Avatar billede w13 Novice
28. juni 2008 - 20:49 #28
Brug funktionen:

decodeURIComponent("Hans%20Peter")
Avatar billede 44fire44 Nybegynder
28. juni 2008 - 21:02 #29
jeg brugte funktionen du postede 20.47 og nu virker det upåklageligt ;) - nu tror jeg det spiller :)
Avatar billede 44fire44 Nybegynder
28. juni 2008 - 21:06 #30
argh - det var sgå da irriterrende - istedet for æøå smider den firkanter ud... - findes der en slags strreplace som man kan bruge?
Avatar billede olebole Juniormester
28. juni 2008 - 21:10 #31
- så er variablerne forkert encoded
Avatar billede 44fire44 Nybegynder
28. juni 2008 - 21:35 #32
og når det nu er til et CMS-system hvor jeg ikke kan ændre tegn-sættet, hvordan løser jeg så det problem?
Avatar billede w13 Novice
28. juni 2008 - 21:37 #33
Så kommer de vel fra et sted med et andet tegnsæt.
Avatar billede 44fire44 Nybegynder
28. juni 2008 - 23:02 #34
well - det kommer når jeg indtaster bogstaverne i browserens adresselinie (både IE og FF)
Avatar billede olebole Juniormester
28. juni 2008 - 23:10 #35
Jamen, det kan du jo heller ikke. I en URL skal specialtegn være encoded  =)
Avatar billede 44fire44 Nybegynder
29. juni 2008 - 00:24 #36
har jeg mulighed for at få scriptet til at encode det for mig?
Avatar billede w13 Novice
06. juli 2008 - 23:29 #37
28/06-2008 20:49:06
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