Avatar billede dreyfusdk Nybegynder
09. august 2005 - 21:35 Der er 12 kommentarer

Trække data ud fra en formfelt på forrige side

Hej,

Normalt vil jeg i ASP bruge min <%=request.form("felt1")%> hvis jeg er på page2.asp og skal hente felt1 fra min formular på page1.asp jeg lige har submittet.

Men hvordan forholder det sig i javascript?

Helt konkret skal jeg i mit javascript indlæse en variabel fra en formular (forrige side) som hedder antal, som jeg senere skal anvende i mit javascript. Min test-kode ser pt. sådan ud (har ingen konkret anvendelsesform, det er bare til at teste):

<script type="text/javascript">
antal = 4;
for (i = 0; i <= antal; i++)
{
  alert("Vi er pt. ved nummer " + i)
}
</script>

Som sagt ville jeg i min ASP Clasic have gjort følgende...

<script type="text/javascript">
antal = <%=request("antal")%>;
for (i = 0; i <= antal; i++)
{
  alert("Vi er pt. ved nummer " + i)
}
</script>

... Men nu står jeg overfor en udfordring hvor jeg skal have det til at spille sammen med nogen statiske HTML sider, så jeg har ikke mulighed for at bruge ASP.

Jeg håber nogen kan hjælpe - det haster lidt :-)
Avatar billede nielle Nybegynder
09. august 2005 - 21:40 #1
Når du submitter formen bliver variablen jo sendt til serveren. Derfra kan du jo så skrive den ind i dit java script:

<script type="text/javascript">
function diSomething()
{
    var dinVar = <% = Request.Write("dinFarFraFormen") %>;
}
</script>
Avatar billede nielle Nybegynder
09. august 2005 - 21:41 #2
... og i dit eget eksempel:

<script type="text/javascript">
antal = <%= Request.Form("antal") %>;
for (i = 0; i <= antal; i++)
{
  alert("Vi er pt. ved nummer " + i)
}
</script>
Avatar billede dreyfusdk Nybegynder
09. august 2005 - 21:44 #3
Hej Nielle,

Tror du misforstår mig, eller så har jeg udtrykt mig forkert.

Det er netop sådan jeg gør nu, bruger ASP script. Men hvad hvis jeg er på en statisk side, hvor jeg er tvunget til at bruge javascript. Hvordan overfører jeg variabler fra den tidligere side?

I dette tilfælde "antal" som kunne komme fra en <input type="text" name="antal">
Avatar billede nielle Nybegynder
09. august 2005 - 21:49 #4
Du kan ikke submitte en form uden at den er inde og vende om serveren.

Du kan selvfølgelig sende til en anden html-side (i stedet for en ASP/PHP). Dette skulle i givet fald gøres som method=GET, men jeg har ingen anelse om hvordan at du så ville få fat i variablene oppe fra adresselinjen.
Avatar billede dreyfusdk Nybegynder
09. august 2005 - 21:55 #5
Ja, der skal jo submittes fra side1.html til side2.html uden nogen nærmere servere dikkedarer.

Er ret sikker på at det kan løses med en POST (det skal det, i dette tilfælde) så er stadig lydhør for forslag.
Avatar billede nielle Nybegynder
09. august 2005 - 22:33 #6
Jeg han få det til at fungere med GET. Men så skal man også være meget snedig:

<script type="text/javascript">
function addAsAnchor()
{
    document.getElementById("jsOnlyForm").action += "#" + document.getElementById("jsOnlyVar").value;
    return true;
}

function getFromAnchor()
{
    var url = document.URL;
    var urlArr = url.split("#");
    var dinVar = urlArr[1];

    alert("dinVar = " + dinVar);
}

getFromAnchor();
</script>

<form id="jsOnlyForm" action="eksperten.htm" method="get" onSubmit="addAsAnchor();">
<input id="jsOnlyVar" type="text" name="e638811" value="42">
<input type="submit">
</form>
Avatar billede nielle Nybegynder
09. august 2005 - 22:45 #7
Det fremgik vist ikke helt klart at den ovenstående fil skulle have navnet eksperten.htm for at demonstere princippet. Den poster altså til sig selv.
Avatar billede olebole Juniormester
09. august 2005 - 22:51 #8
<ole>

location.search indeholder query-strengen - incl. '?'. Derfor kan vi i dokumentet, der submittes imod skrive:

<script type="text/JavaScript">
window.onload = function() {
    var a, vars=[], s = location.search? location.search.substr(1) : false;
    if (!s) return;
    a = s.split("&");
    for (var i=0; i<a.length; i++) {
        a[i] = a[i].split("=");
        if (a[i].length>1) vars[a[i][0]] = a[i][1];
    }

    // Nu ligger alle GET-variabler i det associative array 'vars'
    // Prøv f.eks. at alert'e alle GET-vars og deres værdier:
    for (x in vars) alert(x+" => "+vars[x])
}
</script>

/mvh
</bole>
Avatar billede olebole Juniormester
09. august 2005 - 23:01 #9
Du kunne også i head-sektionen af dit dokument skrive:

<script type="text/JavaScript">
var JS_GET = [];
var a, s = location.search? location.search.substr(1) : false;
if (s) {
    a = s.split("&");
    for (var i=0; i<a.length; i++) {
        a[i] = a[i].split("=");
        if (a[i].length>1) JS_GET[a[i][0]] = a[i][1];
    }
}
</script>

- hvorefter alle GET-variabler er tilgængelige i resten af dokumentet i array'et 'JS_GET':
    alert( JS_GET["noget"] );  // Hvis der er en variabel med navnet 'noget'  :)

- hvilket enhver PHP'er i hvert fald vil kunne nikke genkendende til  ;o)
Avatar billede nielle Nybegynder
12. august 2005 - 09:50 #10
Tja, det lader faktisk ikke til at der er nogen måde at gøre det med POST. Men et par muligheder med GET (hvor Oles klart er at foretrække).

Måske kan du i stedet bruge Cookies til at gemme dine værdier i:

http://www.netspade.com/articles/javascript/cookies.xml
Avatar billede nielle Nybegynder
19. august 2005 - 16:47 #11
Hvad med noget respons?
Avatar billede nielle Nybegynder
26. august 2005 - 09:38 #12
?
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