Client side and server side scripting problem

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Kathryn

    Client side and server side scripting problem

    Hiya
    I have a problem with using some client side and server side scripting
    together in an ASP. I'm using VBScript.

    What I'm trying to achieve is this -

    - Page loads up and some server side vbscript reads the database and
    populates a listbox on the page with the first field from each record
    in the recordset. This works fine.
    - User selects an option on the listbox and, using the OnChange, I
    call a client side vbscript function. This function needs to populate
    the text fields on the page with the rest of the fields from the
    relevant record in the recordset in the server side script that was
    done when the page loaded up.

    I realise that mixing server side and client side isn't possible but
    I'm looking for a way around this. What I can do is create an array in
    the server side code from the recordset and then pass this array into
    the function. I'm having trouble getting this to work though. The
    problem is that it doesn't seem to want to populate the text fields.
    It goes into the function alright because if I put an alert in there
    it appears when I select something from the list box.

    Here's some snippets from my code

    The server side script

    <%'Set up and open the connection to the database
    dim conn, rs, StructureArray( 10,10)
    set conn=Server.Cre ateObject("ADOD B.Connection")
    conn.provider=" Microsoft.Jet.O LEDB.4.0"
    conn.open(serve r.mappath("stru ctures.mdb"))

    set rs = Server.CreateOb ject ("ADODB.records et")
    rs.Open "SELECT * FROM RunStructureVal ues WHERE WorkspaceID = '12',
    conn

    for intRow = 1 to StructureNameRS .RecordCount
    StructureArray( intRow,1) = StructureNameRS .Fields("RunNum ber")
    StructureArray( intRow,2) = StructureNameRS .Fields("MPFLoc ")
    StructureArray( intRow,3) = StructureNameRS .Fields("MPFExt ")
    intRow = intRow + 1
    next
    %>

    The client side script

    <script language="VBScr ipt">
    function UpdateFields(St ructureArray)
    dim index
    index = form1.RunStruct ureName.selecte dIndex
    form1.RunNumber .value = StructureArray( index,1)
    form1.MPFLoc.va lue = StructureArray( index,2)
    form1.MPFExt.va lue = StructureArray( index,3)
    end function
    </script>

    The form

    <form method="post" action="action. asp" target="_self" name="form1">
    <table>
    <tr>
    <td class="SubHeade r">Run Structure</td>
    <td>
    <SELECT name="RunStruct ureName"
    onchange="Updat eFields(<%=Stru ctureArray%>)">
    <%
    do until StructureNameRS .EOF%>
    <OPTION><%=Stru ctureNameRS.Fie lds("RunStructu reName")%></OPTION>
    <%
    StructureNameRS .MoveNext
    loop
    %>
    </SELECT>
    </td>
    </tr>
    <tr>
    <td class="SubHeade r">Run Number</td>
    <td><input type="text" name="RunNumber " value=""></td>
    </tr>
    <tr>
    <td class="SubHeade r">Model Point File Location</td>
    <td><input type="text" name="MPFLoc" value=""></td>
    </tr>
    <tr>
    <td class="SubHeade r">Model Point File Extension</td>
    <td><input type="text" name="MPFExt" value=""></td>
    </tr> </table>
    </form>
    Any advice would be greatly appreciated as my deadline is looming and
    this is the one thing I'm having trouble with! If there is a better
    way to do this sort of thing then please let me know also!

    Thanks.
    Kathryn.
  • Tom Kaminski [MVP]

    #2
    Re: Client side and server side scripting problem

    "Kathryn" <andania1@hotma il.com> wrote in message
    news:42947ac.03 10150416.13292c 1@posting.googl e.com...[color=blue]
    > Hiya
    > I have a problem with using some client side and server side scripting
    > together in an ASP. I'm using VBScript.
    >
    > What I'm trying to achieve is this -
    >
    > - Page loads up and some server side vbscript reads the database and
    > populates a listbox on the page with the first field from each record
    > in the recordset. This works fine.
    > - User selects an option on the listbox and, using the OnChange, I
    > call a client side vbscript function. This function needs to populate
    > the text fields on the page with the rest of the fields from the
    > relevant record in the recordset in the server side script that was
    > done when the page loaded up.
    >
    > I realise that mixing server side and client side isn't possible but
    > I'm looking for a way around this. What I can do is create an array in
    > the server side code from the recordset and then pass this array into
    > the function. I'm having trouble getting this to work though. The
    > problem is that it doesn't seem to want to populate the text fields.
    > It goes into the function alright because if I put an alert in there
    > it appears when I select something from the list box.
    >
    > Here's some snippets from my code
    >
    > The server side script
    >
    > <%'Set up and open the connection to the database
    > dim conn, rs, StructureArray( 10,10)
    > set conn=Server.Cre ateObject("ADOD B.Connection")
    > conn.provider=" Microsoft.Jet.O LEDB.4.0"
    > conn.open(serve r.mappath("stru ctures.mdb"))
    >
    > set rs = Server.CreateOb ject ("ADODB.records et")
    > rs.Open "SELECT * FROM RunStructureVal ues WHERE WorkspaceID = '12',
    > conn
    >
    > for intRow = 1 to StructureNameRS .RecordCount
    > StructureArray( intRow,1) = StructureNameRS .Fields("RunNum ber")
    > StructureArray( intRow,2) = StructureNameRS .Fields("MPFLoc ")
    > StructureArray( intRow,3) = StructureNameRS .Fields("MPFExt ")
    > intRow = intRow + 1
    > next
    > %>
    >
    > The client side script
    >
    > <script language="VBScr ipt">
    > function UpdateFields(St ructureArray)
    > dim index
    > index = form1.RunStruct ureName.selecte dIndex
    > form1.RunNumber .value = StructureArray( index,1)
    > form1.MPFLoc.va lue = StructureArray( index,2)
    > form1.MPFExt.va lue = StructureArray( index,3)
    > end function
    > </script>
    >
    > The form
    >
    > <form method="post" action="action. asp" target="_self" name="form1">
    > <table>
    > <tr>
    > <td class="SubHeade r">Run Structure</td>
    > <td>
    > <SELECT name="RunStruct ureName"
    > onchange="Updat eFields(<%=Stru ctureArray%>)">
    > <%
    > do until StructureNameRS .EOF%>
    > <OPTION><%=Stru ctureNameRS.Fie lds("RunStructu reName")%></OPTION>
    > <%
    > StructureNameRS .MoveNext
    > loop
    > %>
    > </SELECT>
    > </td>
    > </tr>
    > <tr>
    > <td class="SubHeade r">Run Number</td>
    > <td><input type="text" name="RunNumber " value=""></td>
    > </tr>
    > <tr>
    > <td class="SubHeade r">Model Point File Location</td>
    > <td><input type="text" name="MPFLoc" value=""></td>
    > </tr>
    > <tr>
    > <td class="SubHeade r">Model Point File Extension</td>
    > <td><input type="text" name="MPFExt" value=""></td>
    > </tr> </table>
    > </form>
    > Any advice would be greatly appreciated as my deadline is looming and
    > this is the one thing I'm having trouble with! If there is a better
    > way to do this sort of thing then please let me know also![/color]

    When building the array, you need to have the server script use
    Response.Write to write out the client script that will build it. In your
    snippet you are only establishing the array on the server side. Something
    like:

    Response.Write "<script>" & vbcrlf
    for intRow = 1 to StructureNameRS .RecordCount
    Response.Write "StructureArray (intRow,1) = " &
    StructureNameRS .Fields("RunNum ber") & vbcrlf
    etc ...

    --
    Tom Kaminski IIS MVP
    http://www.iistoolshed.com/ - tools, scripts, and utilities for running IIS





    Comment

    • WIlliam Morris

      #3
      Re: Client side and server side scripting problem

      Hello Kathryn,

      You are correct: you can't mix server side and client side, but you're
      heading in more or less the right direction. Your client-side script has no
      idea what StructureArray is, so what you need to do is write the array to
      the client, and access it from there. Something like (borrowing your own
      code...hand me that pencil, won't you? Thanks...):

      <%
      for intRow = 1 to StructureNameRS .RecordCount
      StructureArray( intRow,1) = StructureNameRS .Fields("RunNum ber")
      StructureArray( intRow,2) = StructureNameRS .Fields("MPFLoc ")
      StructureArray( intRow,3) = StructureNameRS .Fields("MPFExt ")
      intRow = intRow + 1
      next
      '--- so now you've got this server side array
      '--- another, possibly easier way, though you have to make your SELECT
      explicit;
      '--- for a variety of reasons, you shouldn't use SELECT * anyway
      '--- because the array is actually going to end up on the client side, this
      step might or might not be necessary,
      '--- but I'd do it because I want to know my array bounds in advance.
      Looping an array is faster
      '--- than looping a recordset, too.
      StructureArray = StructureNameRS .GetRows()
      Dim rCounter, cCounter
      '--- now the client side magic
      With Response
      .Write "<" & "script language=""VBSc ript"" type=""text/vbscript"">" &
      vbCrLf
      .Write " Dim ClientSideArray " & vbCrLf
      .Write " Redim ClientSideArray (" & UBound(Structur eArray) & "," &
      UBound(Structur eArray, 2) & ")" & vbCrLf
      For rCounter = 0 to Ubound(Structur eArray, 2)
      For cCounter = 0 to Ubound(Structur eArray)
      .Write " ClientSideArray (" & rCounter & "," & cCounter & ")
      = """ & StructureArray( rCounter, cCounter) & """" & vbCrLf
      Next
      Next
      .Write "<" & "/script>" & vbCrLf
      End With
      '--- now you've got a client side array you can manipulate with client-side
      script.
      '--- the array needs to live outside a procedure so it's available to all
      scripts on the page
      %>

      If you've got a lot of items, that client-side code is going to get huge in
      a hurry and may take a while to download to the browser. However, I do
      something similar with two Listboxes, one with vehicle makes and one with
      vehicle models, the two linked together to popuplate the model based on the
      make...that's about 500 lines, plus a lot of other code (one page is almost
      2500 lines long when all the server-side stuff is done...employee lists,
      zipcode lists, city lists...) and it loads without any appreciable lag time.

      Hope this helps,

      Wm

      --
      William Morris
      Product Development, Seritas LLC

      "Kathryn" <andania1@hotma il.com> wrote in message
      news:42947ac.03 10150416.13292c 1@posting.googl e.com...[color=blue]
      > Hiya
      > I have a problem with using some client side and server side scripting
      > together in an ASP. I'm using VBScript.
      >
      > What I'm trying to achieve is this -
      >
      > - Page loads up and some server side vbscript reads the database and
      > populates a listbox on the page with the first field from each record
      > in the recordset. This works fine.
      > - User selects an option on the listbox and, using the OnChange, I
      > call a client side vbscript function. This function needs to populate
      > the text fields on the page with the rest of the fields from the
      > relevant record in the recordset in the server side script that was
      > done when the page loaded up.
      >
      > I realise that mixing server side and client side isn't possible but
      > I'm looking for a way around this. What I can do is create an array in
      > the server side code from the recordset and then pass this array into
      > the function. I'm having trouble getting this to work though. The
      > problem is that it doesn't seem to want to populate the text fields.
      > It goes into the function alright because if I put an alert in there
      > it appears when I select something from the list box.
      >
      > Here's some snippets from my code
      >
      > The server side script
      >
      > <%'Set up and open the connection to the database
      > dim conn, rs, StructureArray( 10,10)
      > set conn=Server.Cre ateObject("ADOD B.Connection")
      > conn.provider=" Microsoft.Jet.O LEDB.4.0"
      > conn.open(serve r.mappath("stru ctures.mdb"))
      >
      > set rs = Server.CreateOb ject ("ADODB.records et")
      > rs.Open "SELECT * FROM RunStructureVal ues WHERE WorkspaceID = '12',
      > conn
      >
      > for intRow = 1 to StructureNameRS .RecordCount
      > StructureArray( intRow,1) = StructureNameRS .Fields("RunNum ber")
      > StructureArray( intRow,2) = StructureNameRS .Fields("MPFLoc ")
      > StructureArray( intRow,3) = StructureNameRS .Fields("MPFExt ")
      > intRow = intRow + 1
      > next
      > %>
      >
      > The client side script
      >
      > <script language="VBScr ipt">
      > function UpdateFields(St ructureArray)
      > dim index
      > index = form1.RunStruct ureName.selecte dIndex
      > form1.RunNumber .value = StructureArray( index,1)
      > form1.MPFLoc.va lue = StructureArray( index,2)
      > form1.MPFExt.va lue = StructureArray( index,3)
      > end function
      > </script>
      >
      > The form
      >
      > <form method="post" action="action. asp" target="_self" name="form1">
      > <table>
      > <tr>
      > <td class="SubHeade r">Run Structure</td>
      > <td>
      > <SELECT name="RunStruct ureName"
      > onchange="Updat eFields(<%=Stru ctureArray%>)">
      > <%
      > do until StructureNameRS .EOF%>
      > <OPTION><%=Stru ctureNameRS.Fie lds("RunStructu reName")%></OPTION>
      > <%
      > StructureNameRS .MoveNext
      > loop
      > %>
      > </SELECT>
      > </td>
      > </tr>
      > <tr>
      > <td class="SubHeade r">Run Number</td>
      > <td><input type="text" name="RunNumber " value=""></td>
      > </tr>
      > <tr>
      > <td class="SubHeade r">Model Point File Location</td>
      > <td><input type="text" name="MPFLoc" value=""></td>
      > </tr>
      > <tr>
      > <td class="SubHeade r">Model Point File Extension</td>
      > <td><input type="text" name="MPFExt" value=""></td>
      > </tr> </table>
      > </form>
      > Any advice would be greatly appreciated as my deadline is looming and
      > this is the one thing I'm having trouble with! If there is a better
      > way to do this sort of thing then please let me know also!
      >
      > Thanks.
      > Kathryn.[/color]


      Comment

      • KP

        #4
        Re: Client side and server side scripting problem



        Hi William
        Thank you so much for taking the time out to answer my question so
        thoroughly.

        I've used your suggestion and its working a treat. I now just have a
        problem with my array so I now just need to mess about with it a bit to
        get it right. I hate multi-dimensional arrays but in this case it is
        very necessary :-)

        I may be back if I can't figure it out!

        Thanks again.
        Kathryn.

        *** Sent via Developersdex http://www.developersdex.com ***
        Don't just participate in USENET...get rewarded for it!

        Comment

        • KP

          #5
          Re: Client side and server side scripting problem


          Thanks Tom!


          *** Sent via Developersdex http://www.developersdex.com ***
          Don't just participate in USENET...get rewarded for it!

          Comment

          • WIlliam Morris

            #6
            Re: Client side and server side scripting problem

            I've had lots of occasion to work with multidimensiona l arrays since joining
            the company I'm with. I hate working with recordsets, especially SHAPED
            recordsets, preferring instead to get the recordset into an array and
            closing it as soon as possible. It's not uncommon to find references like:

            response.write employeeArray(1 , 2)(3, 4)

            where an element of a multidimensiona l array ~contains~ a multidimensiona l
            array. Of course, javascript doesn't support them so then you have to work
            with arrays of arrays, as in

            MakeArray[0] = "Ford"
            MakeArray[0][0] = "Escort"
            MakeArray[0][1] = "Fairland"
            MakeArray[0][2] = "Maverick" // have I given away my age yet?

            and so on.



            "KP" <anonymous@devd ex.com> wrote in message
            news:#VW0ky#kDH A.1488@TK2MSFTN GP12.phx.gbl...[color=blue]
            >
            >
            > Hi William
            > Thank you so much for taking the time out to answer my question so
            > thoroughly.
            >
            > I've used your suggestion and its working a treat. I now just have a
            > problem with my array so I now just need to mess about with it a bit to
            > get it right. I hate multi-dimensional arrays but in this case it is
            > very necessary :-)
            >
            > I may be back if I can't figure it out!
            >
            > Thanks again.
            > Kathryn.
            >
            > *** Sent via Developersdex http://www.developersdex.com ***
            > Don't just participate in USENET...get rewarded for it![/color]


            Comment

            • Ray at

              #7
              Re: Client side and server side scripting problem

              Should item [0][1] be "Fairlane?" I especially like the Talladega edition.
              I wonder how many still exist. :]

              Ray at work


              "WIlliam Morris" <seamlyneNO_SP_ AM@hotmail.com> wrote in message
              news:bmmjt3$ohc m1$1@ID-205671.news.uni-berlin.de...
              [color=blue]
              >
              > MakeArray[0] = "Ford"
              > MakeArray[0][0] = "Escort"
              > MakeArray[0][1] = "Fairland"
              > MakeArray[0][2] = "Maverick" // have I given away my age yet?
              >
              > and so on.
              >[/color]


              Comment

              • WIlliam Morris

                #8
                Re: Client side and server side scripting problem

                Erk. Fairlane...you' re right! There are a couple in my town in mint
                condition...one periodically uses our parking lot at breakfast time (we
                share our building with an Italian restaurant).

                "Ray at <%=sLocation% >" <myfirstname at lane34 dot com> wrote in message
                news:OUrwBoAlDH A.2232@TK2MSFTN GP09.phx.gbl...[color=blue]
                > Should item [0][1] be "Fairlane?" I especially like the Talladega[/color]
                edition.[color=blue]
                > I wonder how many still exist. :]
                >
                > Ray at work
                >
                >
                > "WIlliam Morris" <seamlyneNO_SP_ AM@hotmail.com> wrote in message
                > news:bmmjt3$ohc m1$1@ID-205671.news.uni-berlin.de...
                >[color=green]
                > >
                > > MakeArray[0] = "Ford"
                > > MakeArray[0][0] = "Escort"
                > > MakeArray[0][1] = "Fairland"
                > > MakeArray[0][2] = "Maverick" // have I given away my age yet?
                > >
                > > and so on.
                > >[/color]
                >
                >[/color]


                Comment

                • KP

                  #9
                  Re: Client side and server side scripting problem


                  Thanks William, I think I've finally got my head around arrays and this
                  bit of my application is now working perfectly thanks to your help!

                  As for the cars I'm afraid I've not heard of some of the ones you are
                  talking about being that I'm from the UK! And being that I'm young ;-)

                  Kathryn.


                  *** Sent via Developersdex http://www.developersdex.com ***
                  Don't just participate in USENET...get rewarded for it!

                  Comment

                  • William Morris

                    #10
                    Re: Client side and server side scripting problem

                    Glad to hear it Kathryn. I'm not sure what the automotive equivalents are
                    across the Pond, so we'll just let that one go. :)

                    Warmest regards,

                    William Morris
                    Product Development, Seritas LLC

                    "KP" <anonymous@devd ex.com> wrote in message
                    news:#FxFDoLlDH A.3316@tk2msftn gp13.phx.gbl...[color=blue]
                    >
                    > Thanks William, I think I've finally got my head around arrays and this
                    > bit of my application is now working perfectly thanks to your help!
                    >
                    > As for the cars I'm afraid I've not heard of some of the ones you are
                    > talking about being that I'm from the UK! And being that I'm young ;-)
                    >
                    > Kathryn.
                    >
                    >
                    > *** Sent via Developersdex http://www.developersdex.com ***
                    > Don't just participate in USENET...get rewarded for it![/color]


                    Comment

                    Working...