03. maj 2003 - 12:41Der 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
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
<% 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 %>
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!
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
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!
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.
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!
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 ------
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.
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!
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>");
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?
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! ;)
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
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,
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.
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.
Synes godt om
Ny brugerNybegynder
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.