[ASP] Probleem met variabele meegeven vanuit Javascript

Pagina: 1
Acties:
  • 175 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Denga
  • Registratie: September 2000
  • Laatst online: 15-11-2022

Denga

The riding never stops....

Topicstarter
Ik heb een probleempje met het volgende, ik heb een forumulier en die is is opgebouwd uit 2 tekstboxen.
1 normale en 1 gevuld vanuit de database met een For...Next Loop.

Nu heb ik het zo gemaakt in een test bestand:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<html>
  <head>
    <title>Test</title>
    <script type="text/javascript">
      function update() 
      {
        var waarde = document.getElementById("Test").value;
        if (waarde == 0)
        {
          document.getElementById("Blaat").innerHTML = "Blaat A";
        }
        else
        {
          document.getElementById("Blaat").innerHTML = "Blaat B";
        }
      }
    </script>
  </head>
  <body>
    <select name="save" id="Test" onchange="update()">
      <option value="0" selected>A</option>
      <option value="1">B</option>
    </select>
    <table>
      <tr>
        <td>
          <div id="Blaat">Blaat A</div>
        </td>
      </tr>
    </table>
  </body>
</html>


Als ik dit nu ga vertalen naar m'n 'echte' script krijg je ongeveer onderstaande situatie:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<html>
  <head>
    <title>Test</title>
    <script type="text/javascript">
      function update() 
      {
        var waarde = document.getElementById("Test").value;
        if (waarde == 0)
        {
          document.getElementById("Blaat").innerHTML = "<% for f=1 to 1 %>";
        }
        else
        {
          document.getElementById("Blaat").innerHTML = "<% for f=0 to 0 %>";
        }
      }
    </script>
  </head>
  <body>
    <select name="save" id="Test" onchange="update()">
      <option value="0" selected>A</option>
      <option value="1">B</option>
    </select>
    <table>
      <tr>
        <td>
          <select name="save2">
            <div id="blaat"><% for f=0 to uBound(pArrayPaymentMethods)-1 %></div>
              <option value="<%=f%>"> <%=pPaymentMethodDescription%></option>
            <%next%> 
          </select>
        </td>
      </tr>
    </table>
  </body>
</html>


Maar nu krijg ik de melding dat in de bovenste regel waar ik de "<% for f=1 to 1 %>"; als optie aangeef een foutmelding dat:

code:
1
2
3
4
5
6
7
8
Microsoft VBScript compilation error '800a0410' 

Invalid 'for' loop control variable 

test.asp, line 10 

for f=1 to 1
-----^


INu begrijp ik dat het asp eerst wordt uitgevoerd aangezien dit serverside is maar aangezien het in een Javascript functie staat zou ie het niet uit mogen voeren.
Ik heb al geprobeerd het tussne haakjes te zetten, de <% for f=0 to 0 %> op te splitsen maar dan genereerd ie ook een foutmelding.

Dus ik hoop dat ik nu voldoende heb aangettond het ook zelf te kunnen O-)

Never eat yellow snow...


Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Denkfout: het wordt wèl uitgevoerd. Al stond er Swahili omheen; éérst wordt alle ASP-code in de pagina uitgevoerd, daarna wordt het resultaat daarvan bij de in het bestand geplaatste tekst gezet.

Het JavaScript wordt niet gelezen door de ASP-engine.

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Acties:
  • 0 Henk 'm!

  • Denga
  • Registratie: September 2000
  • Laatst online: 15-11-2022

Denga

The riding never stops....

Topicstarter
en dit is te omzeilen door geen asp in de javascript te zetten maar dan moet ik de for string in de select statement in stukjes knippen en dan valt ie daar over...

Never eat yellow snow...


Acties:
  • 0 Henk 'm!

  • xtra
  • Registratie: November 2001
  • Laatst online: 21-09 13:44
Om de splitsing tussen server-side en client-side in gedachten al te maken vind ik het handig om vóór de <html> alle waarden vast te bepalen. Zoiets:
code:
1
2
3
4
5
6
7
8
<%
waarde1 = "abc"
waarde2 = "def"
%>
<html>
...
document.getElementById("Blaat").innerHTML = "<%= waarde1 %>";
...


Als hieruit blijkt dat een waarde pas berekend kan worden na een keuze in je formulier dan moet je een tussenstap met een extra formulier maken.

In dit geval lijkt het mij meer in de syntax te zitten maar VBScript is al een tijd geleden.

Acties:
  • 0 Henk 'm!

  • 4of9
  • Registratie: Maart 2000
  • Laatst online: 13-12-2024
ipv

code:
1
document.getElementById("Blaat").innerHTML = "<% for f=1 to 1 %>";


probeer eens dit:

code:
1
document.getElementById("Blaat").innerHTML = "<%= for f=1 to 1 %>";


let op die =

[ Voor 36% gewijzigd door 4of9 op 25-04-2007 08:20 ]

Aspirant Got Pappa Lid | De toekomst is niet meer wat het geweest is...


Acties:
  • 0 Henk 'm!

  • Denga
  • Registratie: September 2000
  • Laatst online: 15-11-2022

Denga

The riding never stops....

Topicstarter
Nee dat werkt niet want dan maat ie er een Response.write van en dan kan ik net zo goed de <% %> er om weg halen...

Never eat yellow snow...


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 09:43

Janoz

Moderator Devschuur®

!litemod

Probeer eht verschil te begrijpen tussen clientside en serverside. Dat mis je namelijk. Zodra de pagina bij de client staat kan ASP er helemaal niks meer mee. Je bent compleet de verkeerde kant op aan het denken voor het oplossen van dit probleem.

Als je daadwerkelijk de pagina aan wil passen nadat hij al getoont is dan zul je naar technieken als AJAX moeten kijken.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Denga
  • Registratie: September 2000
  • Laatst online: 15-11-2022

Denga

The riding never stops....

Topicstarter
xtra schreef op woensdag 25 april 2007 @ 01:40:
Om de splitsing tussen server-side en client-side in gedachten al te maken vind ik het handig om vóór de <html> alle waarden vast te bepalen. Zoiets:
code:
1
2
3
4
5
6
7
8
<%
waarde1 = "abc"
waarde2 = "def"
%>
<html>
...
document.getElementById("Blaat").innerHTML = "<%= waarde1 %>";
...
Dit is wel een mogelijkheid maar is het dan wel mogelijk om een hele lap functie in een variabele te drukken?

dus:

code:
1
2
3
4
5
<% variabele = %>
<select name="idShipmentArray" size="1">
<% for f=0 to uBound(pArrayShipmentMethods)-1 %><option value="<%=f%>"><%=pShipmentMethodDescription%></option>
<% next %>
</select>

Never eat yellow snow...


Acties:
  • 0 Henk 'm!

  • Denga
  • Registratie: September 2000
  • Laatst online: 15-11-2022

Denga

The riding never stops....

Topicstarter
Ben weer een stapje verder...

code:
1
2
3
4
5
Dim pTest
Dim testo

pDiscountAmount = 0
testo = "<%=pTest" & chr(37) & ">"


Dit roep ik weer aan in:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<script type="text/javascript">
  function update() 
  {
    var waarde = document.getElementById("idPaymentArray").value;
    if (waarde == 2)
      {
        document.getElementById("Blaat").innerHTML = "Rembours";
      }
    else
      {
        document.getElementById("Blaat").innerHTML = "<%Response.write(testo)%>";
      }
    }
</script>


En aan de hand van de waarde van de dropdown beeld ie dus 0 af of Rembours.

code:
1
2
3
<div id="Blaat" align="left">           
  <%Response.write(testo)%> 
</div>


Maar als ik de selectie maak dat ie Rembours moet kiezen beeld ie dat af maar als ik de selectie doe dat ie de waarde van pTest moet afbeelden blijft het leeg...

Vervang ik nu die "<%=pTest" & chr(37) & ">" met "deze zin" doet ie het perfect dus er zal iets zitten in het escapen. Maar volgend mij doe ik dit ook correct?

[ Voor 0% gewijzigd door een moderator op 25-04-2007 16:18 . Reden: Code tags gefixed... ]

Never eat yellow snow...


Acties:
  • 0 Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 09:29

TeeDee

CQB 241

Wat ben je nu allemaal aan het doen en wat wil je?

[snip]... code was zeker niet wat je wilde...[/snip]

Je wilt eigenlijk op basis van de eerste selectie een 2e selectbox vullen met bepaalde waardes?

Edit
Mag ik je een tip geven? Bouw eerst voor jezelf in html/javascript wat je wil hebben, en ga dit dan aanpassen met je asp code.

[ Voor 78% gewijzigd door TeeDee op 25-04-2007 16:40 ]

Heart..pumps blood.Has nothing to do with emotion! Bored


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 09:43

Janoz

Moderator Devschuur®

!litemod

Nee, je doet het niet correct. Probeer asjeblieft eens voor jezelf duidelijk te krijgen wat nu het grote verschil is tussen serverside en clientside. Druk in je browser eens op 'view source' of 'bron bekijken' en zie wat het resultaat is van je ASP code.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Mischa_NL
  • Registratie: Mei 2004
  • Laatst online: 01-02-2023
ik zal je nog verder de goede kant opschoppen: https://icts.kuleuven.be/cursus/dynweb/client-server.html

Acties:
  • 0 Henk 'm!

  • Denga
  • Registratie: September 2000
  • Laatst online: 15-11-2022

Denga

The riding never stops....

Topicstarter
Janoz schreef op woensdag 25 april 2007 @ 16:32:
Nee, je doet het niet correct. Probeer asjeblieft eens voor jezelf duidelijk te krijgen wat nu het grote verschil is tussen serverside en clientside. Druk in je browser eens op 'view source' of 'bron bekijken' en zie wat het resultaat is van je ASP code.
Mijns inziens doe ik het wel correct.
Ik voer 2 database querys uit, daaruit komen 2 waarden, 1 sla ik op inder waarde1 en de andere onder waarde2

<hier eindigd het server verhaal>

Ik vul m'n javascript met waarde 1 en een met waarde 2.

Ik heb op box 1 een onchange zitten en die functioneerd correct.

En aan de hand van box 1 vult ie box 2 met waarde1 of waarde2

<hier eindigd het client verhaal>

Deze gedachtegang lijkt me toch gewoon correct dus kom nu niet weer met het verhaal dat ik het verschil tussen client en server niet ken.

Never eat yellow snow...


Acties:
  • 0 Henk 'm!

  • Mischa_NL
  • Registratie: Mei 2004
  • Laatst online: 01-02-2023
"<% for f=1 to 1 %>"
dat vind ik ook maar vaag trouwens :)

Acties:
  • 0 Henk 'm!

  • voodooless
  • Registratie: Januari 2002
  • Laatst online: 24-09 16:20

voodooless

Sound is no voodoo!

Naast al dit:

- Wat doet een DIV in een select :?
- Wat zou die innerHTML moeten uitvreten :?
- Wat is het nut van het vullen van een select vanuit een andere als de bron statisch is en je de ontvanger dynamisch poogt te maken :?

Zie hier de horror van het mixen van client side en server side code (naast de horror van VB, maar dat is natuurlijk persoonlijke voorkeur, of technische spec) :'(

Do diamonds shine on the dark side of the moon :?


Acties:
  • 0 Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 09:29

TeeDee

CQB 241

Denga schreef op woensdag 25 april 2007 @ 17:48:
[...]
Deze gedachtegang lijkt me toch gewoon correct dus kom nu niet weer met het verhaal dat ik het verschil tussen client en server niet ken.
Men probeert jou met jouw probleem hier te helpen, en afgaande op hetgeen je hier laat zien zou ik naar bepaalde mensen hier luisteren of in ieder geval hun tips opvolgen.
Mischa_NL schreef op woensdag 25 april 2007 @ 18:04:
"<% for f=1 to 1 %>"
dat vind ik ook maar vaag trouwens :)
Mja, daar mis je inderdaad nog wat. In ieder geval een next, want daar krijg je dan als eerste een error op :)

Nog een tip (ook Janoz zei dat al): kijk eens wat er gerenderd wordt in de browser. Dus de output.

Heart..pumps blood.Has nothing to do with emotion! Bored


Acties:
  • 0 Henk 'm!

  • Denga
  • Registratie: September 2000
  • Laatst online: 15-11-2022

Denga

The riding never stops....

Topicstarter
thanx voor de tip _/-\o_

Never eat yellow snow...


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 09:43

Janoz

Moderator Devschuur®

!litemod

Je grote denkfout is volgens mij dat je denkt dat een stukje programmacode ook een 'waarde' is, en dat is het niet. Daarnaast probeer je clientside (in javascript) er voor te zorgen dat er een structuur ontstaat die eigenlijk serverside al uit gevoerd had meoten worden (met javascript zet je de start van de for lus op een plek en denkt dat die vervolgens wel serverside uitgevoerd zal zijn).

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Denga
  • Registratie: September 2000
  • Laatst online: 15-11-2022

Denga

The riding never stops....

Topicstarter
Het is me dus wel gelukt op de manier die ik ook voor ogen had... Ben nu de structuur effe aan het opschonen en dan zal ik de oplossing hier posten...

Maar in ieder geval bedankt voor het meedenken en het geven van tips, want daar heb ik zeker wat aan gehad !

Never eat yellow snow...

Pagina: 1