Avatar billede moejensen Nybegynder
08. februar 2005 - 12:13 Der er 37 kommentarer og
1 løsning

problemer med response.flush

Jeg er ved at lave en nyhedsmailfunktion, hvor jeg skal kunne sende 5000 - 10.000 mails ud. Mens funktionen kører vil jeg gerne have at der bliver skrevet på skærmen hvor mange mails der er sendt, men jeg kan ikke få det til at virke.

Min funktioner starter med:

Response.Buffer = True

og længere nede står der inde i mail mail looper:

if 0 = Err then
  Count = Count + 1
  Response.Write("Mailen er sendt til: "&Count)
  Response.Flush
End if
Avatar billede moejensen Nybegynder
08. februar 2005 - 12:13 #1
der kommer bare ikke noget ud på skærmen før løkken er helt færdig
Avatar billede thesurfer Nybegynder
08. februar 2005 - 14:43 #2
Response.Buffer skal være False.
Avatar billede thesurfer Nybegynder
08. februar 2005 - 14:44 #3
..tror jeg :-)
Ved True, venter den til hele siden er genereret, inden den udskriver data.
Avatar billede thesurfer Nybegynder
08. februar 2005 - 14:51 #4
Prøv evt med en kombination af ASP, HTML og java script:

<div id="taeller">

<script type="text/JavaScript">
function tael(num)
{
document.getElementById("taeller").innerHTML = "Antal mail sendt: " + num;
}
</script>

Så skulle du gerne bruge:

Response.Write "<script type='text/JavaScript'>tael(" & count & ");</script>"


DIV og function skal stå før count-delen.
Avatar billede thesurfer Nybegynder
08. februar 2005 - 14:53 #5
Skulle ha' været: <div id="taeller"></div>    (manglede "</div>")
Avatar billede moejensen Nybegynder
08. februar 2005 - 15:51 #6
Jeg prøvede lige med Buffer = False, så får jeg denne fejl:

Mailen er sendt til: 1
Response object error 'ASP 0159 : 80004005'

Buffering Off

/sendMail.asp, line 131

Buffering must be on.
Avatar billede moejensen Nybegynder
08. februar 2005 - 15:56 #7
Nu har jeg fået den til at skrive ud efter hånden som den får mailsne sendt, men de første bliver sendt meget hurtigt, men efter den har sendt 20 mails, går det rigtig langsomt. Hvad kan det skyldes.
Avatar billede thesurfer Nybegynder
08. februar 2005 - 16:04 #8
Det er muligvis din mail server (hos host'en) der ikke kan følge med.

Når det er at man skal maile til mange personer, er det bedst at lave noget paging.. dvs, at man mailer i "bidder" i stedet for alle på éen gang, da dette kan fejle.

Jeg kan desværre ikke hjælpe med paging koden.. du kan muligvis finde noget ved at søge her på Eksperten.. det har nemlig være oppe og vende et par gange..

Hvis du har flere spm, kan du naturligvis stadig skrive i dette spm.. hvis jeg ikke kan svare, kan det være at en anden kan..
Avatar billede moejensen Nybegynder
08. februar 2005 - 16:05 #9
så fik jeg klaret det med at den gik i stå ved at lukke objektet og åbne det igen efter den har sendt 20 mails
Avatar billede moejensen Nybegynder
08. februar 2005 - 16:14 #10
dit eksempel fra kl. 14:51:29 er ret smart, men jeg kan ikke helt få det til at virke.

Lige før min løkke der sender mails ud, har jeg følgende:

response.write("<div id=taeller></div>" &vbCrlf)

response.write("<script type=text/JavaScript>"&vbCrlf)
response.write("function tael(num)"&vbCrlf)
response.write("{"&vbCrlf)
response.write("document.getElementById('taeller').innerHTML = 'Antal mail sendt: ' + num;"&vbCrlf)
response.write("}"&vbCrlf)
response.write("</script>"&vbCrlf)

det skal sikre at javascriptet er tilgængeligt når optællingen sker.

I løkken har jeg så følgende:

mailCount = mailCount + 1
Response.Write "<script type='text/JavaScript'>tael(" & mailCount & ");</script>"
Response.Flush

jeg får en javafejl der hedder: document.getElementById(...) is null or not an object
Avatar billede Slettet bruger
08. februar 2005 - 16:18 #11
nu er jeg ikke asp ekspert men fejlen burde ligge her: <div id=taeller></div> skal være: <div id="taeller"></div>
Avatar billede thesurfer Nybegynder
08. februar 2005 - 16:19 #12
Det er kun "tael(...)"-js delen der skal stå i loopen..

dvs:

<div...>
<script ...
function tael(...
</script>

<%
start loop her

Response.Write "<script type='text/JavaScript'>tael(" & mailCount & ");</script>"

slut loop her
%>
Avatar billede thesurfer Nybegynder
08. februar 2005 - 16:21 #13
..ellers oprettes div-elementet hver gang at loopen kører.. og det er ikke godt :-)
(det samme med funktionen)..

PS: Så vide jeg ved, er det lige meget om man bruger "" når man bruge "id=..".. dvs id="taeller" og id=taeller er begge ok..
Og så er det HTML, ikke ASP :-)
Avatar billede moejensen Nybegynder
08. februar 2005 - 16:24 #14
sådan er det også nu.

Jeg har også lige prøvet at rette til så der kommer " rundt om taeller, så det nu ser således ud:

response.write("<div id=""taeller""></div>" &vbCrlf)
response.write("<script type=""text/JavaScript"">"&vbCrlf)
response.write("function tael(num)"&vbCrlf)
response.write("{"&vbCrlf)
response.write("document.getElementById(""taeller"").innerHTML = ""Antal mail sendt: "" + num;"&vbCrlf)
response.write("}"&vbCrlf)
response.write("</script>"&vbCrlf)
Avatar billede thesurfer Nybegynder
08. februar 2005 - 16:27 #15
moejensen> prøv 08/02-2005 16:19:00
Avatar billede moejensen Nybegynder
08. februar 2005 - 16:30 #16
det er sådan det skulle være sat op:

<div...>
<script ...
function tael(...
</script>

har hele tiden været uden for løkken
Avatar billede thesurfer Nybegynder
08. februar 2005 - 16:31 #17
Har du stadig problemer?
Avatar billede moejensen Nybegynder
08. februar 2005 - 16:34 #18
yep, jeg får stadig samme fejl. nu har jeg prøvet at lave lidt om på den for at vøre det lidt mere simpelt. I toppen har jeg nu:

response.write("<div id=""taeller""></div>" &vbCrlf)

og i løkken har jeg:

mailCount = mailCount + 1
Response.Write "<script type='text/JavaScript'>document.getElementById('taeller').innerHTML = 'Antal mail sendt: "&mailCount&"';</script>"
Response.Flush
Avatar billede moejensen Nybegynder
08. februar 2005 - 16:41 #19
det er som om den ikke får lavet tæller diven. Jeg prøvede at tjekke hvad der var af kode når den sender mailsne, men kan kan kun få vist koden for framesettet, også selvom jeg højreklikker og vælger vis kilde i framevinduet.
Avatar billede thesurfer Nybegynder
08. februar 2005 - 16:43 #20
Det eneste der skal skrives igen og igen, er selve kaldet til funktioner + mailcount værdien.

Det du har i 08/02-2005 16:34:43 burde også virke. Men du har ikke skrevet om du stadig har problemer.. skriv det venligst hver gang du prøvet noget nyt :-)
Avatar billede moejensen Nybegynder
08. februar 2005 - 16:45 #21
jeg har stadig probelmert, ellers ville jeg ikke blive ved med at skrive ;-)

jeg var bange for at diven ikke kom ud, så jeg prøvede at skrive følgende:

response.write("<div id=""taeller""></div>" &vbCrlf)
Response.Flush

men det gav heller ikke pote :-(
Avatar billede thesurfer Nybegynder
08. februar 2005 - 16:51 #22
Prøv at gøre det i ren HTML, dvs uden response.write..
Avatar billede moejensen Nybegynder
08. februar 2005 - 16:58 #23
Nu satte jeg den ind således

mailCount = mailCount + 1%>
<script type="text/JavaScript">document.getElementById('taeller').innerHTML = 'Antal mail sendt:';</script>
<%'Response.write("Mail sendt: " &mailCount&" ")
Response.Flush

Det gav samme fejl.
Avatar billede moejensen Nybegynder
08. februar 2005 - 17:01 #24
Jeg er gået tilbage ti laspløsningen, og har nu fået koden ud, og den kommer til at se således ud:

<div id="taeller"></div>
<script type='text/JavaScript'>document.getElementById('taeller').innerHTML = 'Antal mail sendt: 1';</script><script type='text/JavaScript'>document.getElementById('taeller').innerHTML = 'Antal mail sendt: 2';</script><script type='text/JavaScript'>document.getElementById('taeller').innerHTML = 'Antal mail sendt: 3';</script><script type='text/JavaScript'>document.getElementById('taeller').innerHTML = 'Antal mail sendt: 4';</script><script type='text/JavaScript'>document.getElementById('taeller').innerHTML = 'Antal mail sendt: 5';</script><script type='text/JavaScript'>document.getElementById('taeller').innerHTML = 'Antal mail sendt: 6';</script><script type='text/JavaScript'>document.getElementById('taeller').innerHTML = 'Antal mail sendt: 7';</script><script type='text/JavaScript'>document.getElementById('taeller').innerHTML = 'Antal mail sendt: 8';</script><script type='text/JavaScript'>document.getElementById('taeller').innerHTML = 'Antal mail sendt: 9';</script><script type='text/JavaScript'>document.getElementById('taeller').innerHTML = 'Antal mail sendt: 10';</script><script type='text/JavaScript'>document.getElementById('taeller').innerHTML = 'Antal mail sendt: 11';</script><script type='text/JavaScript'>document.getElementById('taeller').innerHTML = 'Antal mail sendt: 12';</script><script type='text/JavaScript'>document.getElementById('taeller').innerHTML = 'Antal mail sendt: 13';</script><script type='text/JavaScript'>document.getElementById('taeller').innerHTML = 'Antal mail sendt: 14';</script><script type='text/JavaScript'>document.getElementById('taeller').innerHTML = 'Antal mail sendt: 15';</script><script type='text/JavaScript'>document.getElementById('taeller').innerHTML = 'Antal mail sendt: 16';</script><script type='text/JavaScript'>document.getElementById('taeller').innerHTML = 'Antal mail sendt: 17';</script><script type='text/JavaScript'>document.getElementById('taeller').innerHTML = 'Antal mail sendt: 18';</script><script type='text/JavaScript'>document.getElementById('taeller').innerHTML = 'Antal mail sendt: 19';</script><script type='text/JavaScript'>document.getElementById('taeller').innerHTML = 'Antal mail sendt: 20';</script><script type='text/JavaScript'>document.getElementById('taeller').innerHTML = 'Antal mail sendt: 21';</script><script type='text/JavaScript'>document.getElementById('taeller').innerHTML = 'Antal mail sendt: 22';</script><script type='text/JavaScript'>document.getElementById('taeller').innerHTML = 'Antal mail sendt: 23';</script><script type='text/JavaScript'>document.getElementById('taeller').innerHTML = 'Antal mail sendt: 24';</script><script type='text/JavaScript'>document.getElementById('taeller').innerHTML = 'Antal mail sendt: 25';</script><script type='text/JavaScript'>document.getElementById('taeller').innerHTML = 'Antal mail sendt: 26';</script><script type='text/JavaScript'>document.getElementById('taeller').innerHTML = 'Antal mail sendt: 27';</script><script type='text/JavaScript'>document.getElementById('taeller').innerHTML = 'Antal mail sendt: 28';</script><script type='text/JavaScript'>document.getElementById('taeller').innerHTML = 'Antal mail sendt: 29';</script><script type='text/JavaScript'>document.getElementById('taeller').innerHTML = 'Antal mail sendt: 30';</script><script type='text/JavaScript'>document.getElementById('taeller').innerHTML = 'Antal mail sendt: 31';</script><script type='text/JavaScript'>document.getElementById('taeller').innerHTML = 'Antal mail sendt: 32';</script><script type='text/JavaScript'>document.getElementById('taeller').innerHTML = 'Antal mail sendt: 33';</script><script type='text/JavaScript'>document.getElementById('taeller').innerHTML = 'Antal mail sendt: 34';</script><script type='text/JavaScript'>document.getElementById('taeller').innerHTML = 'Antal mail sendt: 35';</script><script type='text/JavaScript'>document.getElementById('taeller').innerHTML = 'Antal mail sendt: 36';</script><script type='text/JavaScript'>document.getElementById('taeller').innerHTML = 'Antal mail sendt: 37';</script><script type='text/JavaScript'>document.getElementById('taeller').innerHTML = 'Antal mail sendt: 38';</script><script type='text/JavaScript'>document.getElementById('taeller').innerHTML = 'Antal mail sendt: 39';</script><script type='text/JavaScript'>document.getElementById('taeller').innerHTML = 'Antal mail sendt: 40';</script><script type='text/JavaScript'>document.getElementById('taeller').innerHTML = 'Antal mail sendt: 41';</script><script type='text/JavaScript'>document.getElementById('taeller').innerHTML = 'Antal mail sendt: 42';</script><script type='text/JavaScript'>document.getElementById('taeller').innerHTML = 'Antal mail sendt: 43';</script><script type='text/JavaScript'>document.getElementById('taeller').innerHTML = 'Antal mail sendt: 44';</script><script type='text/JavaScript'>document.getElementById('taeller').innerHTML = 'Antal mail sendt: 45';</script><script type='text/JavaScript'>document.getElementById('taeller').innerHTML = 'Antal mail sendt: 46';</script><script type='text/JavaScript'>document.getElementById('taeller').innerHTML = 'Antal mail sendt: 47';</script><script type='text/JavaScript'>document.getElementById('taeller').innerHTML = 'Antal mail sendt: 48';</script>

Kan det have noegt at sige at det kommer til at stå der så mange gange?
Avatar billede thesurfer Nybegynder
08. februar 2005 - 17:02 #25
- Hvad er fejlmeddelelsen? Hvilken linie?

Det ser også noget forker ud :-)

Det her *burde* virke:

<div id="taeller">

<script type="text/JavaScript">
function tael(num)
{
document.getElementById("taeller").innerHTML = "Antal mail sendt: " + num;
}
</script>

<%
start loop
...
Response.Write "<script type='text/JavaScript'>tael(" & mailCount & ");</script>"
...
slut loop

%>


Virker det?
Avatar billede thesurfer Nybegynder
08. februar 2005 - 17:03 #26
Det VIL komme til at stå der mange gange :-)
Der kommer 1 linie, for hver gang at der sendes 1 mail :-)
Avatar billede thesurfer Nybegynder
08. februar 2005 - 17:04 #27
Nu gjorde jeg det igen (glemte "</div>")! :-)

Sådan:

<div id="taeller"></div>

<script type="text/JavaScript">
function tael(num)
{
document.getElementById("taeller").innerHTML = "Antal mail sendt: " + num;
}
</script>

<%
start loop
...
Response.Write "<script type='text/JavaScript'>tael(" & mailCount & ");</script>"
...
slut loop

%>
Avatar billede moejensen Nybegynder
08. februar 2005 - 17:07 #28
så prøvede jeg lige det du skrev her til sidst, og det giver stadig fejlen:

Line: 7
Char: 5
Error: 'document.getElementById(...)' is null or not an object
Code: 0

Jeg får fejlen for hver linie/mail der bliver sendt
Avatar billede moejensen Nybegynder
08. februar 2005 - 17:09 #29
den kode der komme rud på skærmen ser således ud:

1:
2: <div id="taeller"></div>
3: <script type="text/JavaScript">
4: function tael(num)
5: {
6: document.getElementById("taeller").innerHTML = "Antal mail sendt: " + num;
7: }
8: </script>
10:

11: <script type='text/JavaScript'>tael(1);</script><script type='text/JavaScript'>tael(2);</script><script type='text/JavaScript'>tael(3);</script><script type='text/JavaScript'>tael(4);</script><script type='text/JavaScript'>tael(5);</script><script type='text/JavaScript'>tael(6);</script><script type='text/JavaScript'>tael(7);</script><script type='text/JavaScript'>tael(8);</script><script type='text/JavaScript'>tael(9);</script><script type='text/JavaScript'>tael(10);</script><script type='text/JavaScript'>tael(11);</script><script type='text/JavaScript'>tael(12);</script><script type='text/JavaScript'>tael(13);</script><script type='text/JavaScript'>tael(14);</script><script type='text/JavaScript'>tael(15);</script><script type='text/JavaScript'>tael(16);</script><script type='text/JavaScript'>tael(17);</script><script type='text/JavaScript'>tael(18);</script><script type='text/JavaScript'>tael(19);</script><script type='text/JavaScript'>tael(20);</script><script type='text/JavaScript'>tael(21);</script><script type='text/JavaScript'>tael(22);</script><script type='text/JavaScript'>tael(23);</script><script type='text/JavaScript'>tael(24);</script><script type='text/JavaScript'>tael(25);</script><script type='text/JavaScript'>tael(26);</script><script type='text/JavaScript'>tael(27);</script><script type='text/JavaScript'>tael(28);</script><script type='text/JavaScript'>tael(29);</script><script type='text/JavaScript'>tael(30);</script><script type='text/JavaScript'>tael(31);</script><script type='text/JavaScript'>tael(32);</script><script type='text/JavaScript'>tael(33);</script><script type='text/JavaScript'>tael(34);</script><script type='text/JavaScript'>tael(35);</script><script type='text/JavaScript'>tael(36);</script><script type='text/JavaScript'>tael(37);</script><script type='text/JavaScript'>tael(38);</script><script type='text/JavaScript'>tael(39);</script><script type='text/JavaScript'>tael(40);</script><script type='text/JavaScript'>tael(41);</script><script type='text/JavaScript'>tael(42);</script><script type='text/JavaScript'>tael(43);</script><script type='text/JavaScript'>tael(44);</script><script type='text/JavaScript'>tael(45);</script><script type='text/JavaScript'>tael(46);</script><script type='text/JavaScript'>tael(47);</script><script type='text/JavaScript'>tael(48);</script>
Avatar billede thesurfer Nybegynder
08. februar 2005 - 17:13 #30
hmm.. underligt..

Her er en lokal test, der virker:


<div id="taeller">Antal mail sendt: 0</div>

<script type="text/JavaScript">
var c = 0;

function tael(num)
{
document.getElementById("taeller").innerHTML = "Antal mail sendt: " + num;
}

function laegtil()
{
c = c + 1;
tael(c);
}
</script>

<input type="button" value="Læg 1 til" onclick="laegtil()">
Avatar billede thesurfer Nybegynder
08. februar 2005 - 17:16 #31
Jeg bliver desværre nød til at smutte.. kommer på igen engang i aften.. omkring 21-22 tiden..
Avatar billede moejensen Nybegynder
08. februar 2005 - 17:22 #32
Nu virker det sku også.

Jeg skrev det du havde lavet lidt om, så det blev lidt mere simpelt:

i toppen har jeg nu:

response.write("<div id=""taeller"">Antal mail sendt: 0</div>" &vbCrlf)
Response.Flush

i løkken har jeg:

Response.Write ("<script type=""text/JavaScript"">document.getElementById(""taeller"").innerHTML = ""Antal mail sendt: "&mailCount&""";</script>")
Response.Flush

Jeg takker mange gange for tålmodigheden. Du må gerne lave et svar
Avatar billede moejensen Nybegynder
08. februar 2005 - 17:26 #33
der kom lige et lille tillægsspørgsmål ;-)

Nu har jeg jo i toppen af siden ståedne Antal mail sendt: xxxx

Kan jeg på nogen måde slette det inden den rigtige status besked kommer frem?, så den på en måde clear siden inden når den er færdig med at sende beskederne.
Avatar billede thesurfer Nybegynder
08. februar 2005 - 21:26 #34
Hvordan mener du?

Efter loopen kan du indsætte:
Response.Write "<script type=""text/JavaScript"">document.getElementById(""taeller"").innerHTML = """"; document.getElementById(""taeller"").style.display=""none"";</script>"

Altså, du sætter indholdet til "" (ingenting).. og '.style.display="none"'-delen skjuler div-boksen.

Skriv lige, hvis det ikke er det du mente..

- Svar
Avatar billede moejensen Nybegynder
08. februar 2005 - 21:33 #35
det er lidt alla det jeg mener, men nu har jeg lavet lidt mere html i toppen, så jeg også har en pogressbar, og den står jo i toppen af siden når alle mails er sendt, så det ville være fedt, hvis man kunne rense siden iden den endelige side kommer frem, altså lige som når man kalder en helt ny side. håber du forstår hvad jeg mener.
Avatar billede thesurfer Nybegynder
08. februar 2005 - 21:40 #36
Så er det vel bare koden (fra 08/02-2005 21:26:10) der skal bruges?
Hvis det er mere du vil have fjernet, kan du putte det hele i et div-tag, som du fjerner senere..

Eksempel:
<div id="temp">

  <div id="taeller"></div>
  noget mere her

</div>

så kan du bruge koden, til at skjule ALT hvad der er i temp-boksen:
document.getElementById('temp').style.display='none';

Løser det problemet? :-)
Hvis ikke, skriv  :-)


- Takker for points.
Avatar billede moejensen Nybegynder
08. februar 2005 - 21:49 #37
nå ja, det er da klart. Du er sku skarp til at klare de her problemstillinger.
Avatar billede thesurfer Nybegynder
08. februar 2005 - 21:57 #38
Lidt kan man da altid ;-)
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