Avatar billede thomas_regin Nybegynder
03. maj 2003 - 12:41 Der er 36 kommentarer og
1 løsning

If ... then javascript?

Hey!

Jeg har en ASP-fil, som fungerer som et javascript, dvs, at den bliver included via et <script language=javascript src=myfile.asp>. Denne fil returnerer et banner. Ingen problemer so far.

Problemet opstår når jeg forsøger mig med:

if not RS.EOF then
%>
        document.write("<a href='adRed.asp?guid=<%=RS("GUID")%>' target='_blank'><img src='/admin/_banners/<%=RS("Banner_image")%>' border='0'></a>");
<%
    End If
%>

Uagtet om RS er EOF eller ej, så returnerer den det lille stykke javascript i midten, og det giver et "Image not found"-ikon (med det røde kryds over), og det kan jeg ikke rigtigt bruge.

For mig, er det dybt ulogisk. ASP-koden burde aldrig nogensinde afvikle det javascript, hvis RS er EOF. Der er ingen problemer, hvis der rent faktisk findes en record!

Hvis jeg laver et andet check. F.eks:

i = 1
if i = 2 then
%>
  document.write("Hejsa");
<%
End If

Ja, så er der pludseligt ingen problemer!

Hjælp !! ;)

/thomas regin.
Avatar billede eagleeye Praktikant
03. maj 2003 - 12:46 #1
Prøv evt både at tjekke på EOF og BOF:

if not (RS.EOF OR RS.BOF) then
Avatar billede thomas_regin Nybegynder
03. maj 2003 - 12:47 #2
Har prøvet!.. Det samme! :-/
Avatar billede erikjacobsen Ekspert
03. maj 2003 - 12:55 #3
Jamen, så står der noget i tabellen.
Avatar billede grunken Nybegynder
03. maj 2003 - 12:55 #4
<%
if not (RS.EOF or RS.BOF) then
        response.write"document.write(""<a href='adRed.asp?guid=" & RS("GUID") & "' target='_blank'><img src='/admin/_banners/" & RS("Banner_image") & "' border='0'></a>"");"
End If
%>

prøv at ændre det til at se sådan ud :

-grunken
Avatar billede thomas_regin Nybegynder
03. maj 2003 - 13:01 #5
Grunken,

Det virkede sgu'!! Smid et svar! :)

Erik,

Nej, mystisk nok var tabellen tom !! Havde checket i Query Analyzer.. ! ;) Eftersom Grunken's forslag virkede, så tænker jeg på, om browseren altid starter med at afvikle Javascript, og derefter ASP?.. Det kunne ihvertfald være svaret!

Anyways.. Nu virker det!

Tak for hjælpen,

/thomas regin.
Avatar billede eagleeye Praktikant
03. maj 2003 - 13:04 #6
Forklar lige hvor min if sætning er forskellig fra den Grunken har vist.
Avatar billede thomas_regin Nybegynder
03. maj 2003 - 13:06 #7
Eagle:

Han bruger ASP's Response.Write til at udskrive javascriptet!.. Dit foreslag gik udelukkende på rs.EOF or rs.BOF !.. ;)

/thomas.
Avatar billede grunken Nybegynder
03. maj 2003 - 13:06 #8
Hej Thomas

Jeg aner faktisk ikke hvofor at det andet ikke skulle virke, men et eller andet sted må det jo have læst det JS

Men udover det er det en go skik at lære i asp at response.write ALLE tingene ud, en af fordelene er at serveren er fri for at skifte fortolker hele tiden, og den derfor ikke bliver så hårdt presset

-grunken
Avatar billede grunken Nybegynder
03. maj 2003 - 13:07 #9
eagleeye > ikke andet end jeg osse placerer skidtet i en response.write ;)
Avatar billede erikjacobsen Ekspert
03. maj 2003 - 13:10 #10
"hårdt presset" ... det passer ikke.

De to ting skal være ækvivalente. Prøv at fjerne response.write
Avatar billede grunken Nybegynder
03. maj 2003 - 13:10 #11
For langsom ;D

lægger et svar ;)
Avatar billede thomas_regin Nybegynder
03. maj 2003 - 13:10 #12
Grunken,

Jeg er ikke uenig!.. Men problemet er jo ofte, når man arbejder med meget store applikationer, at det bliver uoverskueligt, hvis al HTML og så videre bliver afviklet via Response.Write. Derfor laver jeg altid en vægtning, således, jeg så vidt muligt lader HTML være HTML og så bruger ASP's indbyggede metoder til funktioner og så videre. På den måde får man også større opdeling af kode og HTML. ;)

Jeg kan heller ikke forklare hvorfor det ikke virkede! Mystisk!

/thomas.
Avatar billede thomas_regin Nybegynder
03. maj 2003 - 13:11 #13
Erik,

Hvis jeg fjerner Response.Write så virker det ikke længere. Så skriver den JS'en ud uanset hvad! :-/

/thomas.
Avatar billede eagleeye Praktikant
03. maj 2003 - 13:15 #14
Nej den skiver det ikke altid ud hvis du fjerne Response.write.

Det som afgør om det bliver udskrevet er udelukket den if sætning. ASP afvikles inden HTML/javascript, og hvis ASP koden ikke´kommer ind i den if sætning er der ikke noget JAvascript i din HTML fil som browseren kan vise.
Du har sikker ikke fået tomt din chache.
Avatar billede thomas_regin Nybegynder
03. maj 2003 - 13:18 #15
Eagle:

Selvfølgelig har jeg tømt min cache! ;) Jeg er jo ikke amatør!.. Heh..

Jeg kører altid med "Check for newer versions of stored pages on every visit to the site" og så videre..

Jeg kan ikke forklare hvorfor den IF/ELSE ikke virkede efter hensigten, men jeg er helt sikker på, at fejlen lå i måden javascriptet blev afviklet på. Ellers ville jeg stadig ha' problemer nu!

Mvh,

Thomas Regin.
Avatar billede erikjacobsen Ekspert
03. maj 2003 - 13:20 #16
Der er altså noget andet galt, Thomas. Har du lyst, kan du smide
hele din kode her (eller et link) - så finder vi nok ud af det
Avatar billede erikjacobsen Ekspert
03. maj 2003 - 13:26 #17
Dette virker perfekt, både med en sand og en falsk betingelse i
SELECT-sætningen:

<%
set conn = Server.CreateObject("ADODB.Connection")
conn.Open "PROVIDER=Microsoft.Jet.OLEDB.4.0; DATA SOURCE=" & Server.Mappath("../xxxxx.mdb")

set rs = conn.execute("select * from bungy where 1=0")

if not rs.eof then

%>
  document.write("Her: <%=rs(0)%> <%=rs(1)%> <%=rs(2)%> <br>");
<%
  end if
%>
Avatar billede thomas_regin Nybegynder
03. maj 2003 - 13:36 #18
Okay Erik!.. Dette er den originale, som IKKE virkede hos mig! Naturligvis kan jeg ikke demonstrere SQL'en, men blot sige, at jeg via Query Analyzer har checket præcis hvor og hvornår recordsettene er tomme og hvornår de ikke er:

'------------- _adrotator.asp start ------
<!--#include file=../_wps_library/dbconnopen.asp-->
<%
    if Request.QueryString("f") = 1 then
        strSQL = "Select ID, Menu_idfk from Artikel_countainer_tbl where OnFrontPage = '1'"
        set bRS = dbconn.execute(strSQL)
        artID = bRS("ID")
        MenuID = bRS("Menu_idfk")
    else
        artID = Request.QueryString("artID")
        MenuID = Request.QueryString("Cat_id")   
    End If
    strSQL = "sp_BannerRotate '" & Request.QueryString("z") & "','" & artID & "','" & MenuID & "'"
    set myRS = dbconn.execute(strSQL)

   
    if not myRS.EOF then
%>
        document.write("<a href='adRed.asp?guid=<%=myRS("GUID")%>' target='_blank'><img src='/admin/_banners/<%=myRS("Banner_image")%>' border='0'></a>");
<%
    End If
%>
'--------- Slut ------

Mvh,

Thomas Regin.
Avatar billede erikjacobsen Ekspert
03. maj 2003 - 13:47 #19
Der er intet mystisk ved if-sætningen. Prøv at skrive din url i en
browser i stedet for via <script src..:> - du går måske glip af
nogle fejlbeskedder fra SQL-en.
Avatar billede thomas_regin Nybegynder
03. maj 2003 - 13:54 #20
Hejsa Erik!

Det har jeg naturligvis også prøvet!.. Og det er det samme resultat hver gang:

HTML'en kommer til at se således ud:

document.write("<a href='adRed.asp?guid=' target='_blank'><img src='/admin/_banners/' border='0'></a>");

Uden nogle værdier i variablerne!

Mvh,

Thomas Regin.
Avatar billede erikjacobsen Ekspert
03. maj 2003 - 13:58 #21
Så har du sikkert også skrevet din sql-sætning ud, og skrevet
værdien af din myRS.EOF ?

(Ja, jeg bliver ved.... *g*)
Avatar billede thomas_regin Nybegynder
03. maj 2003 - 13:59 #22
Ja, selvfølgelig!.. Jeg har testet min SP direkte i Query Analyzer, og registreret, når den giver et recordset og ikke!.. Jeg har herefter checket i koden, men resultatet er det samme hver gang! HVIS recordsettet har en record, så virker det fint - Hvis ikke, så laver den det tomme javacript med et ukendt billede!

Mvh,

Thomas.
Avatar billede thomas_regin Nybegynder
03. maj 2003 - 14:00 #23
Ukendt billede = ingenting (tomt billede)
Avatar billede thomas_regin Nybegynder
03. maj 2003 - 14:02 #24
Det er muligvis endnu en IE-bug, ligesom den berømte <input type crash> ;)

/thomas.
Avatar billede eagleeye Praktikant
03. maj 2003 - 14:30 #25
Jeg har prøvet din kode og hvis der er noget i recordsetet skriver den dette ud, 11 og hej.jpg er noget jeg har lagt i kolonnerne.:
document.write("<a href='adRed.asp?guid=11' target='_blank'><img src='/admin/_banners/hej.jpg' border='0'></a>");

Hvis rs er tomt så er der bare en tom side...
Avatar billede eagleeye Praktikant
03. maj 2003 - 14:31 #26
Prøv med den response.write som Grunken har vist dig, men behold din egen if sætning og fortæl så hvad du får ?
Avatar billede eagleeye Praktikant
03. maj 2003 - 14:33 #27
Du bliver snydt af et eller andet med dit recordset ikke er helt tomt.


Da du prøvede min løsning:  if not (RS.EOF OR RS.BOF) then
Skrev du da så
if not myRS.EOF OR myRS.BOF then
Eller:
if not (RS.EOF OR RS.BOF) then
Avatar billede eagleeye Praktikant
03. maj 2003 - 14:33 #28
hov sidste linje skulle være:
if not (myRS.EOF OR myRS.BOF) then
Avatar billede eagleeye Praktikant
03. maj 2003 - 14:34 #29
Hvis du for test i stedet for udskrive et bille så noget tekst.:

if myRS.BOF then
  Response.write "BOF er false<br>"
end if
if myRS.EOF then
  Response.write "EOF er false<br>"
end if

og fortæl hvad den skriver.
Avatar billede erikjacobsen Ekspert
03. maj 2003 - 16:58 #30
En anden grund til det mystisk er, at hvis der
ikke er nogle tupler (selecet ... where 1=0) så vil rs(0) give
en fejl. Du får ingen fejl siger du. Så *må* du have en
tupel (række) med tomme værdier.

Og fejlen vil være


ADODB.Fielderror '80020009'

Either BOF or EOF is True, or the current record has been deleted. Requested operation requires a current record.


Er din browser indstillet til at vise dig JavaScript fejl?
Avatar billede thomas_regin Nybegynder
03. maj 2003 - 18:44 #31
Erik,

Lad os bare antage, at du har ret, men hvorfor virkede det så fint, da jeg bruge ASP's Response.Write istedet for document.write()? Jeg har jo ikke rodet i DB'en, eller i noget som helst andet! ;)

Og ja, min browser viser JavaScript fejl! ;

/thomas
Avatar billede eagleeye Praktikant
03. maj 2003 - 18:48 #32
Prøv som jeg har forslået med grunkes response.write men din if sætning altså sådan her:

if not myRS.EOF then
  response.write"document.write(""<a href='adRed.asp?guid=" & myRS("GUID") & "' target='_blank'><img src='/admin/_banners/" & myRS("Banner_image") & "' border='0'></a>"");"
End If


Og fortæl om det virker som det skal eller det er det samme som uden Response.write
Avatar billede erikjacobsen Ekspert
03. maj 2003 - 18:50 #33
Det kan have noget at gøre med hvornor fejlen udskrives.
Med response.write skal hele strengen laves først, så kommer
der kun en fejludskrift - ikke lovligt javascript - ingen
billeder med krydser i...
Med <img ... <%=rs(...)%> kommer <img først og så fejludskriften.

Men det er kun teori. SKal vi videre - eller er tilfreds med
at der render en lille husalf rundt i din computer og laver
narrestreger med dig,
Avatar billede thomas_regin Nybegynder
03. maj 2003 - 18:52 #34
Eagle,

Det er jo præcis som jeg har det nu, hvor det virker perfekt, så det er der jo ingen grund til at prøve! ;)

Det virker ikke, hvis jeg fjerner Response.Write!

/thomas
Avatar billede thomas_regin Nybegynder
03. maj 2003 - 18:57 #35
Erik,

Der kommer ingen javascript fejl, når jeg bruger document.write(). Den laver bare de forskellige tags uden værdier i DB-variablerne.

Jeg er nu ganske godt tilfreds med den løsning, som Grunken gav mig, men jeg er naturligvis interesseret i af finde ud af, hvorfor hulen den ikke vil godtage det. Det er muligvis min SP, som rent faktisk returnerer noget, som bare ikke er en "rigtig" tupel!?

Jeg får meddelelsen "The command(s) completed successfully", når jeg kører min SP uden, at den returnerer nogle rows, og den returnerer et recordset,når den finder noget.

/thomas.
Avatar billede eagleeye Praktikant
03. maj 2003 - 18:59 #36
Og du er 100% sikker på du har din føste if som kun tjekker på EOF?
Har du prøvet det jeg skrev i kommentar (03/05-2003 14:34:51)?
Avatar billede thomas_regin Nybegynder
03. maj 2003 - 19:29 #37
Eagle,

if myRS.BOF then
  Response.write "BOF er false<br>"
end if
if myRS.EOF then
  Response.write "EOF er false<br>"
end if

Resultatet bliver:

BOF er false
EOF er false

Så det er jo et problem!

Jeg er på vej ud ad døren, men er tilbage en gang i aften!.. Kom endelig med gode idéer ! ;)

/thomas.
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
Kurser inden for grundlæggende programmering

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