Avatar billede aerobee Nybegynder
16. november 2006 - 09:07 Der er 33 kommentarer og
2 løsninger

Ny post funktion.

Jeg er lidt i tvivl om hvilken kategori dette spørgsmål skal stilles da det både indeholder ASP og Javascript, men here goes nothing.

Jeg sidder og skal lave en funktion der kan underette en bruger om at han/hun har fået post på websitet mens de er online.

Det første jeg tænkte var et stykke javascript der refresher en side hvert 5. minut som så udfører en sql forspørgsel (ud fra brugerens unikke id som ligger i en session) om der er kommet ny post.
Det har jeg så lavet.

Men jeg skal jo også have skubbet en besked frem til brugeren, en popup eller noget der så gør brugeren opmærksom på at han/hun har modtaget ny post.
Jeg har lavet scriptet i en seperat fil, som brugeren aldrig kommer direkte ind på, da jeg ikke vil have at deres side bliver refreshed hvert 5. minut - det skal ske i baggrunden uden at de ligger mærke til det - pludselig skal den popup bare være der hvis der er ny post (også selvom de ikke bevæger sig rundt på sitet)

Jeg tænker en usynelig iframe på bruger siden der så kører det script der refresher hvert 5. minut, men så kommer der jo stadig en klik lyd osv - gør der ikke ?

Hmm, synes det er svært at forklare hehe.

Men kort og kort er vel:
Selvom en bruger ikke bevæger sig rundt på siden skal han/hun underrettes om ny post vha en popup. Jeg tænker ikke en javascript popup men mere en DHTML popup, du ved, en popup på selve websitet som popup blockere ikke kan blokere.

Forsøgte mig også i ASP kategorien som i kan se her
http://www.eksperten.dk/spm/744996
Avatar billede keysersoze Ekspert
16. november 2006 - 09:15 #1
som allerede foreslået i det andet spørgsmål vil jeg også slå et slag for ajax. Meget kort sagt går det ud på at du har et stykke javascript som du kan sætte til - usynligt og uden kliklyde - at spørge en anden side om et bestemt resultat, og er der et resultat (i dit tilfælde en besked), kan du fx lave et popup-vindue eller hvad end du ønsker. se eksempelvis http://vertikal.dk/ajax/
Avatar billede aerobee Nybegynder
16. november 2006 - 09:21 #2
ja, jeg har hørt meget godt om Ajax, og har også set hvad det kan.
Det er også noget jeg vil sætte mig ind i og lære - når tiden endelig er til det.

Det jeg godt kunne bruge var et lille eksempel på hvordan man kan udføre det jeg har behov for. Blot noget simpelt som jeg så selv kan videre bygge på.
Avatar billede jokkejensen Novice
16. november 2006 - 09:26 #3
du finder det ikke mere simpelt end det link jeg smed til w3 schools.
Avatar billede aerobee Nybegynder
16. november 2006 - 10:02 #4
Ja der er jo godt nok nogle gode eksempler på hvordan man kan lave nogle scripts via ajax.
Men jeg har simpelthen ikke tiden til at lære det desværre. Men skal nok komme igang.

Det jeg håbede på herinde var et lille kort eksempel på hvordan mit problem kan løses.
Jeg har lavet en side der refresher hvert 5. minut og som tjekker om der er kommet ny post. Det jeg mangler er at på en eller anden måde inkludere det script på brugersiden så man kan informere brugeren om at han/hun har fået post.

Men hvis jeg inkluderer den på side refresher hele side jo, med klik lyd og det hele - og det er det jeg gerne vil udenom. Alle tjek skal ske i baggrunden uden brugere ved noget om det.
Avatar billede keysersoze Ekspert
16. november 2006 - 11:13 #5
mener ikke dette giver klik;

setTimeout("self.location.reload(true);",500);
Avatar billede aerobee Nybegynder
16. november 2006 - 12:12 #6
Jeg har allerede et stk javascript der refresher...

<!-- Server Refresh Script -->
<html>
<head>
    <title>chkPost Funktion</title>
   
    <%
    'Refresh angives i sekunder
    refresh = 10
    %>
   
    <noscript>
        <meta http-equiv="refresh" content="<%=refresh%>">
    </noscript>
   
    <script language="JavaScript">
    <!--
    var sURL = unescape(window.location.pathname);
   
    function doLoad(){
        setTimeout( "refresh()", <%=refresh%>*1000 );
    }
   
    function refresh(){
        window.location.href = sURL;
    }
    //-->
    </script>
   
    <script language="JavaScript1.1">
    <!--
    function refresh(){
        window.location.replace( sURL );
    }
    //-->
    </script>
   
    <script language="JavaScript1.2">
    <!--
    function refresh(){
        window.location.reload( false );
    }
    //-->
    </script>
</head>
<body onLoad="doLoad()">
</body>
</html>
Avatar billede aerobee Nybegynder
16. november 2006 - 12:24 #7
Tjek det her script...

Det virker, hvis sql forspørgslen er true vises en popup med at der er ny post.
Det eneste jeg bare mangler er hvordan jeg kan inkludere dette script på brugersiden uden at den refresher hele siden, kun scriptet.

Ja en iframe er en mulighed, men så tager den jo plads på brugersiden...
Og sætter jeg iframen til style="display:none;" så er post beskeden jo også hidden..

Hjælp!!!

*********************************************
<%
set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open " DRIVER=MySQL ODBC 3.51 Driver; SERVER=xxxx; UID=xxxx; PWD=xxxx; DATABASE=xxxx;"
Session.lcid = 1030

if session("bruger") <> "" then

    myid = session("bruger")
    Set rspost = conn.execute("select * from indbakke where BrugerID="&myid&" and Last=0")
   
    if not rspost.eof then%>
        <script type="text/javascript">
        function hideAd(divId)
        { if (document.layers) document.layers[divId].visibility = 'hide';
          else if (document.all) document.all[divId].style.visibility = 'hidden';
          else if (document.getElementById) document.getElementById(divId).style.visibility = 'hidden';
        }
       
        function adDown(divId)
        { state=typeof topPos;
          if(state=='undefined') topPos=-260;
          if(topPos < 75)
          { topPos+=3;
              if (document.layers) document.layers[divId].top = topPos;
            else if (document.all) document.all[divId].style.top = topPos;
            else if (document.getElementById) document.getElementById(divId).style.top = topPos;   
           
            setTimeout("adDown('pop');",25);
            }
        }
        </script>
       
        <script type="text/javascript">
        if (parseInt(navigator.appVersion) >= 4 && navigator.javaEnabled())
        { document.write('<div id="pop"><table bgcolor="#cccccc" border="0" style="border:1px solid black;"><tr><td align="right" height="24"><a href="java script:void(0)" style="text-decoration:none; color:#000000; border:1px solid black;" onclick="hideAd(\'pop\')">x</a></td></tr><tr><td align="center"><font size="5"><strong>Ny Post</strong></font><br><br>Du har modtaget post fra<br><strong>8-Ball</strong><br><br><a href="welcome.asp?page=post&action=indbakke">Gå til indbakke</a><br /><br /></td></tr></table></div>');
         
          if (document.layers) document.layers.pop.left = ((window.innerWidth / 2) - (330 / 2));
          else if (document.all) document.all.pop.style.left = ((document.body.offsetWidth / 2) - (330 / 2));
          else if (document.getElementById) document.getElementById("pop").style.left = ((window.innerWidth / 2) - (330 / 2));
        }
        </script>
    <%end if

end if
%>

<!-- Server Refresh Script -->
<html>
<head>
    <title>chkPost Funktion</title>
   
    <%
    'Refresh angives i sekunder
    refresh = 10
    %>
   
    <noscript>
        <meta http-equiv="refresh" content="<%=refresh%>">
    </noscript>
   
    <script language="JavaScript">
    <!--
    var sURL = unescape(window.location.pathname);
   
    function doLoad(){
        setTimeout( "refresh()", <%=refresh%>*1000 );
    }
   
    function refresh(){
        window.location.href = sURL;
    }
    //-->
    </script>
   
    <script language="JavaScript1.1">
    <!--
    function refresh(){
        window.location.replace( sURL );
    }
    //-->
    </script>
   
    <script language="JavaScript1.2">
    <!--
    function refresh(){
        window.location.reload( false );
    }
    //-->
    </script>
</head>
<body onLoad="doLoad()">
</body>
</html>
<!-- Server Refresh Script -->
*********************************************
Avatar billede keysersoze Ekspert
16. november 2006 - 12:30 #8
hvorfor dog have så mange linier kode når min ene linie kan gøre det?

Du undgår under ingen omstændigheder en iframe hvis hele siden ikke må reloade - og i og med at den selvfølgelig ikke må vises på siden bliver du nødt til at lave noget script der går fra iframen og ud til parent eller laver en ganske almindelig popup.
Avatar billede aerobee Nybegynder
16. november 2006 - 13:02 #9
har du eventuelt et eksempel keyseroze ?
Avatar billede keysersoze Ekspert
16. november 2006 - 13:12 #10
jamen - der er jo ufattelig mange muligheder...

alert('ny besked')
/
parent.document.getElementById('fxditlayer').style.visibility = 'visible';
Avatar billede aerobee Nybegynder
16. november 2006 - 13:29 #11
tænkte mere på om du havde mulighed for at illustrere hvordan jeg via en skjult iframe på brugersiden kan skubbe en besked ud fra iframen sådan at brugeren kan se den. Vil gerne sådan at iframen får attributten style="display:none;" sådan at den hverken kan ses eller optager plads, men stadig kan skyde popuppen op så brugerne kan se den når der er post.
F.eks. den popup i eksemplet herover.?
Avatar billede keysersoze Ekspert
16. november 2006 - 13:37 #12
det er jo også det jeg lige har gjort;

parent.document.getElementById('fxditlayer').style.visibility = 'visible';

du kan også bare lægge din function i parent og så kalde den fra din iframe med noget i retning af

parent.dinfunction();
Avatar billede aerobee Nybegynder
16. november 2006 - 13:41 #13
Sorry, men er lost.. hehe
Avatar billede keysersoze Ekspert
16. november 2006 - 13:50 #14
læg dine funktioner på parent-siden (dvs den side der indeholder iframen og ikke den side i selve iframen) og kald din function med parent.adDown('pop').
Avatar billede aerobee Nybegynder
16. november 2006 - 14:30 #15
keyseroze>>

Har du tid lyst og mulighed for at lave det eksempel du nævner, med ovenstående script?
Avatar billede keysersoze Ekspert
16. november 2006 - 15:05 #16
desværre ikke nej - men hvis du i hvert fald starter forsøget kan det være jeg eller andre kan hjælpe mere på vej når du igen går i stå.
Avatar billede aerobee Nybegynder
16. november 2006 - 15:17 #17
Allright, smid et svar keysersoze, lidt points skal du da have :)
Avatar billede keysersoze Ekspert
16. november 2006 - 22:28 #18
svar
Avatar billede aerobee Nybegynder
17. november 2006 - 07:28 #19
svar
Avatar billede aerobee Nybegynder
17. november 2006 - 07:28 #20
svar hmm
Avatar billede aerobee Nybegynder
17. november 2006 - 08:45 #21
right keyseroze...
Jeg har forsøgt mig lidt, og er kommet frem til følgende, men det virker dog stadig ikke.

Siden hvor popuppen skal vises indeholder følgende:
**********************************************
<iframe src="../checkPost.asp" height="0" width="0" id="test1" style="visibility:hidden"></iframe>
**********************************************

checkPost.asp indeholder følgende:
**********************************************
<%
set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open " DRIVER=MySQL ODBC 3.51 Driver; SERVER=xxxx; UID=xxxx; PWD=xxxx; DATABASE=xxxx;"
Session.lcid = 1030

if session("bruger") <> "" then

    myid = session("bruger")
    Set rspost = conn.execute("select * from indbakke where BrugerID="&myid&" and Last=0")
   
    if not rspost.eof then%>
        <script type="text/javascript">
                parent.document.getElementById('test1').style.visibility = 'visible';
        function hideAd(divId)
        { if (document.layers) document.layers[divId].visibility = 'hide';
          else if (document.all) document.all[divId].style.visibility = 'hidden';
          else if (document.getElementById) document.getElementById(divId).style.visibility = 'hidden';
        }
       
        function adDown(divId)
        { state=typeof topPos;
          if(state=='undefined') topPos=-260;
          if(topPos < 75)
          { topPos+=3;
              if (document.layers) document.layers[divId].top = topPos;
            else if (document.all) document.all[divId].style.top = topPos;
            else if (document.getElementById) document.getElementById(divId).style.top = topPos;   
           
            setTimeout("adDown('pop');",25);
            }
        }
        </script>
       
        <script type="text/javascript">
        if (parseInt(navigator.appVersion) >= 4 && navigator.javaEnabled())
        { document.write('<div id="pop"><table bgcolor="#cccccc" border="0" style="border:1px solid black;"><tr><td align="right" height="24"><a href="java script:void(0)" style="text-decoration:none; color:#000000; border:1px solid black;" onclick="hideAd(\'pop\')">x</a></td></tr><tr><td align="center"><font size="5"><strong>Ny Post</strong></font><br><br>Du har modtaget post fra<br><strong>8-Ball</strong><br><br><a href="welcome.asp?page=post&action=indbakke">Gå til indbakke</a><br /><br /></td></tr></table></div>');
         
          if (document.layers) document.layers.pop.left = ((window.innerWidth / 2) - (330 / 2));
          else if (document.all) document.all.pop.style.left = ((document.body.offsetWidth / 2) - (330 / 2));
          else if (document.getElementById) document.getElementById("pop").style.left = ((window.innerWidth / 2) - (330 / 2));
        }
        </script>
    <%end if

end if
%>

<!-- Server Refresh Script -->
<html>
<head>
    <title>chkPost Funktion</title>
   
    <%
    'Refresh angives i sekunder
    refresh = 10
    %>
   
    <noscript>
        <meta http-equiv="refresh" content="<%=refresh%>">
    </noscript>
   
    <script language="JavaScript">
    <!--
    var sURL = unescape(window.location.pathname);
   
    function doLoad(){
        setTimeout( "refresh()", <%=refresh%>*1000 );
    }
   
    function refresh(){
        window.location.href = sURL;
    }
    //-->
    </script>
   
    <script language="JavaScript1.1">
    <!--
    function refresh(){
        window.location.replace( sURL );
    }
    //-->
    </script>
   
    <script language="JavaScript1.2">
    <!--
    function refresh(){
        window.location.reload( false );
    }
    //-->
    </script>
</head>
<body onLoad="doLoad()">
</body>
</html>
<!-- Server Refresh Script -->
****************************************************
Avatar billede keysersoze Ekspert
17. november 2006 - 08:48 #22
og så skal jeg selv gætte hvilken fejl du får hvis overhovedet nogen?
Avatar billede aerobee Nybegynder
17. november 2006 - 08:58 #23
hehe nej.. Jeg får ingen fejl.. Der sker bare ingenting, popuppen kommer ikke frem selvom der er post.. Hvis jeg eksekverer checkPost.asp alene kommer popuppen fint..

Men er koden ellers skrevet korrekt?
Avatar billede aerobee Nybegynder
17. november 2006 - 09:03 #24
parent.document.getElementById('test1').style.visibility = 'visible';
ligger i den første script blok i checkPost.asp - er dog ikke sikker på om den er placeret korrekt der.
Avatar billede keysersoze Ekspert
17. november 2006 - 09:09 #25
prøv at forklar hvad det er du vil så - det som den ene linie gør er at sætte din iframe synlig, men da højden og bredden er 0 er der jo ikke noget at vise? så skal du også ændre størrelsen på iframen... min tanke var at flytte det der nu en skulle vises ud af iframen.
Avatar billede aerobee Nybegynder
17. november 2006 - 09:23 #26
Ja præcis.. Det jeg vil er at den popup der kommer i iframen bliver skubbet ud af iframen.
Ok kan også godt se nu det du siger - det giver ikke megen mening.
Men forstår desværre ikke det du siger i din kommentar 16/11-2006 13:50:26.

Eller jo det tror jeg, jeg gør. men har ingen idé om hvordan jeg kan udføre dette
Avatar billede keysersoze Ekspert
17. november 2006 - 09:31 #27
et eksempel;

hvis du lægger denne på din side;

<div id="ditlayer" style="visibility: hidden; display: none;">test</div>

kan du kan den fra din iframe;

parent.document.getElementById('ditlayer').style.visibility = 'visible';
parent.document.getElementById('ditlayer').style.display= 'block';

skal du have indhold fra iframen og ud er det noget a la

parent.document.getElementById('ditlayer').innerHTML= 'dette skal stå i mit layer';
Avatar billede aerobee Nybegynder
17. november 2006 - 10:03 #28
checkPost.asp ser ud sådan ud
***************************************
<%
set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open " DRIVER=MySQL ODBC 3.51 Driver; SERVER=xxxx; UID=xxxx; PWD=xxxx; DATABASE=xxxx;"
Session.lcid = 1030

if session("bruger") <> "" then

    myid = session("bruger")
    Set rspost = conn.execute("select * from indbakke where BrugerID="&myid&" and Last=0")
   
    if not rspost.eof then%>
        <script type="text/javascript">
        parent.document.getElementById('test1').style.visibility = 'visible';
        parent.document.getElementById('test1').style.display= 'block';
        parent.document.getElementById('test1').innerHTML= '';
        function hideAd(divId)
        { if (document.layers) document.layers[divId].visibility = 'hide';
          else if (document.all) document.all[divId].style.visibility = 'hidden';
          else if (document.getElementById) document.getElementById(divId).style.visibility = 'hidden';
        }
       
        function adDown(divId)
        { state=typeof topPos;
          if(state=='undefined') topPos=-260;
          if(topPos < 75)
          { topPos+=3;
              if (document.layers) document.layers[divId].top = topPos;
            else if (document.all) document.all[divId].style.top = topPos;
            else if (document.getElementById) document.getElementById(divId).style.top = topPos;   
           
            setTimeout("adDown('pop');",25);
            }
        }
        </script>
       
        <script type="text/javascript">
        if (parseInt(navigator.appVersion) >= 4 && navigator.javaEnabled())
        { document.write('<div id="pop"><table bgcolor="#cccccc" border="0" style="border:1px solid black;"><tr><td align="right" height="24"><a href="java script:void(0)" style="text-decoration:none; color:#000000; border:1px solid black;" onclick="hideAd(\'pop\')">x</a></td></tr><tr><td align="center"><font size="5"><strong>Ny Post</strong></font><br><br>Du har modtaget post fra<br><strong>8-Ball</strong><br><br><a href="welcome.asp?page=post&action=indbakke">Gå til indbakke</a><br /><br /></td></tr></table></div>');
         
          if (document.layers) document.layers.pop.left = ((window.innerWidth / 2) - (330 / 2));
          else if (document.all) document.all.pop.style.left = ((document.body.offsetWidth / 2) - (330 / 2));
          else if (document.getElementById) document.getElementById("pop").style.left = ((window.innerWidth / 2) - (330 / 2));
        }
        </script>
    <%end if

end if
%>

<!-- Server Refresh Script -->
<html>
<head>
    <title>chkPost Funktion</title>
   
    <%
    'Refresh angives i sekunder
    refresh = 10
    %>
   
    <noscript>
        <meta http-equiv="refresh" content="<%=refresh%>">
    </noscript>
   
    <script language="JavaScript">
    <!--
    var sURL = unescape(window.location.pathname);
   
    function doLoad(){
        setTimeout( "refresh()", <%=refresh%>*1000 );
    }
   
    function refresh(){
        window.location.href = sURL;
    }
    //-->
    </script>
   
    <script language="JavaScript1.1">
    <!--
    function refresh(){
        window.location.replace( sURL );
    }
    //-->
    </script>
   
    <script language="JavaScript1.2">
    <!--
    function refresh(){
        window.location.reload( false );
    }
    //-->
    </script>
</head>
<body onLoad="doLoad()">
</body>
</html>
<!-- Server Refresh Script -->
***********************************************

og filen hvori popuppen skal vises:
************************************************
    <div id="test1" style="visibility: hidden; display: none;">test</div>
    <iframe src="../checkPost.asp" height="0" width="0" id="test1" style="visibility:hidden;"></iframe>
************************************************

mit spørgsmål er så...
hvordan kan jeg få begge funktioner ind i parent.document.getElementById('test1').innerHTML= ''; som er i den første script blok? Der er jo de funktioner der skal ud af iframen da de angiver popuppen
Avatar billede keysersoze Ekspert
17. november 2006 - 10:27 #29
kaster du bare det ind jeg skriver eller forsøger du at forstå det?
Avatar billede aerobee Nybegynder
17. november 2006 - 10:29 #30
Jeg forsøger at forstå det, men javascript er desværre ikke min stærke side...
Avatar billede aerobee Nybegynder
17. november 2006 - 10:36 #31
jeg kan jo ikke smide jo script funktioner ind imellem ' ' i denne streng parent.document.getElementById('test1').innerHTML= '';. Så bliver funktionerne jo fortolket som tekst, og det er jo ikke det vi vil
Avatar billede aerobee Nybegynder
17. november 2006 - 10:37 #32
Det burde jo være det her stykke kode som skal imellem ' '

***********************************
<div id="pop"><table bgcolor="#cccccc" border="0" style="border:1px solid black;"><tr><td align="right" height="24"><a href="java script:void(0)" style="text-decoration:none; color:#000000; border:1px solid black;" onclick="hideAd(\'pop\')">x</a></td></tr><tr><td align="center"><font size="5"><strong>Ny Post</strong></font><br><br>Du har modtaget post fra<br><strong>8-Ball</strong><br><br><a href="welcome.asp?page=post&action=indbakke">Gå til indbakke</a><br /><br /></td></tr></table></div>
*************************************

da det er det som skriver popuppen.. men javascript funktionerne skal vel med for at den kan eksekveres?
Avatar billede keysersoze Ekspert
17. november 2006 - 10:44 #33
det jeg har forsøgt at fortælle er jo netop at den del af koden skal helt ud af iframen - hvis du lægger den uden for iframen sammen med alle functions kan du gøre 100% som var der ingen iframe.
Avatar billede aerobee Nybegynder
17. november 2006 - 10:53 #34
Jeg forstår overhovedet ikke hvordan jeg skal gøre det keyseroze. Vi må hellere stoppe her og jeg siger mange tak for alt din hjælp :)
Avatar billede olebole Juniormester
20. november 2006 - 15:33 #35
<ole>

Hmmm ... Martin Jørgensen ... er det ikke ham fra landsholdet? Ajax og X(HT)ML er i hvert fald ikke det, han ved noget om - og det samme gælder 'vor ven' fra w3schools.com  :)

Begge scripts sender HTML-formaterede data, som indsættes med innerHTML. Nu forholder det sig bare sådan, at innerHTML aldrig har været del af nogen officiel standard ... og bliver det heller aldrig. Desuden vil brugen af innerHTML i en browser med ægte XHTML-understøttelse få denne til at dø med et hult suk og en XML-fejl.

Påstanden om, at det slet ikke ville kunne gøres med XML, forstår jeg overhovedet ikke. Gad vide, hvorfor alle mulige andre kodere mon kan løse den slags?  :)

Sluttelig er der ingen, der siger, man behøver bruge XML til at formatere de returnerede data. Det kan ligeså godt gøres med (min personlige favorit) JSON, som er slankere og mere direkte at bruge i JavaScript. Samtidig er det i øvrigt X-platform og kan bruges til alt fra JS over Java til C.

/mvh
</bole>
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