[AJAX & PHP] Elke keer andere timertijd

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • DennusB
  • Registratie: Mei 2006
  • Niet online
Hee tweakers,

Ik ben bezig een systeempje te maken, maar ik zit nu even in de knoop met ajax.
Dit is de code in mijn ajax:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<script language="javascript">

function createRequestObject2() { 
var req; 
if(window.XMLHttpRequest){ 
req = new XMLHttpRequest(); 
} else if(window.ActiveXObject) { 
req = new ActiveXObject("Microsoft.XMLHTTP"); 
} else { 
alert('Problem creating the XMLHttpRequest object'); 
} 
return req; 
} 

var http2 = createRequestObject2(); 

function getPhp2() { 
http2.open('get','getpagina.php',true); 
http2.onreadystatechange = getPhpResponse2; 
http2.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
http2.send(null); 

} 

function getPhpResponse2() { 
if(http2.readyState == 4 && http2.status == 200) { 
document.getElementById("slideDiv").innerHTML = http2.responseText;
} 
} 
setInterval(function (nTimeInterval) { 
getPhp2(); 
nTimeInterval = nTimeInterval || 0; 
},10000);
getPhp2(); 
</script>

Gaat perfect, want zoals je onderaan kan zien herlaad de pagina elke 10 seconden :)
Nu is het alleen zo, dat de ene keer de timertijd 10000 moet zijn, de volgende keer moet hij 150000 zijn en daarna bijvoorbeeld 34000. Dat staat in de database.

Maar hoe pas ik dynamisch die timer-tijd aan?
Ik dacht slim te zijn en het stukje van de timer in de opgevraagde pagina te zetten, die dus elke keer opgevraagd wordt door ajax.
Maar helaas, dit mocht niet baten :X
Google heb ik afgestruind, maar ik kom er echt niet uit.

Kunnen jullie mij helpen ?
Alvast enorm bedankt :>

Owner of DBIT Consultancy | DJ BassBrewer


Acties:
  • 0 Henk 'm!

  • Johnny
  • Registratie: December 2001
  • Laatst online: 21-09 14:39

Johnny

ondergewaardeerde internetguru

In plaats van setInterval kan je met setTimeout werken, en dan na het aflopen van de verstreken tijd weer een functie aanroepen waarin setTimout staat met je nieuwe tijdsduur.

Aan de inhoud van de bovenstaande tekst kunnen geen rechten worden ontleend, tenzij dit expliciet in dit bericht is verwoord.


Acties:
  • 0 Henk 'm!

  • DennusB
  • Registratie: Mei 2006
  • Niet online
Johnny schreef op vrijdag 10 april 2009 @ 14:02:
In plaats van setInterval kan je met setTimeout werken, en dan na het aflopen van de verstreken tijd weer een functie aanroepen waarin setTimout staat met je nieuwe tijdsduur.
Maar hoe kom ik dan aan die nieuwe dynamische tijdsduur?
Die moet ergens uit een database worden getrokken...

Owner of DBIT Consultancy | DJ BassBrewer


Acties:
  • 0 Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 21:07

TeeDee

CQB 241

Schrijf met PHP de tijdsduur variable weg. Deze kan je vervolgens prima teruglezen in JS.

Iets als:
PHP:
1
echo "<script type=\"melp\">var tijd=waarde;</script>";

Heart..pumps blood.Has nothing to do with emotion! Bored


Acties:
  • 0 Henk 'm!

  • DennusB
  • Registratie: Mei 2006
  • Niet online
TeeDee schreef op vrijdag 10 april 2009 @ 14:42:
Schrijf met PHP de tijdsduur variable weg. Deze kan je vervolgens prima teruglezen in JS.

Iets als:
PHP:
1
echo "<script type=\"melp\">var tijd=waarde;</script>";
Ik heb dus in de pagina die wordt opgevraagd jouw code gezet, maar inplaats van waarde als test even 10000.
Dan krijg ik dit:
Afbeeldingslocatie: http://download.brouwernetwork.nl/files/2/tijd_defeni.jpg

Dus gaat toch niet goed :(

Owner of DBIT Consultancy | DJ BassBrewer


Acties:
  • 0 Henk 'm!

  • Patriot
  • Registratie: December 2004
  • Laatst online: 19:24

Patriot

Fulltime #whatpulsert

Laat je PHP-script anders eens zien, want ik geloof dat je het verkeerd hebt gedaan (het is in ieder geval wél mogelijk). Aan de hand van alleen deze foutmelding kunnen we niet zoveel zeggen.

Acties:
  • 0 Henk 'm!

  • DennusB
  • Registratie: Mei 2006
  • Niet online
Hier een verkorte versie van het php script, de query's enzo zijn denk ik niet zo intressant?
code:
1
2
3
4
5
6
7
8
9
10
11
<?php
header("Expires: Mon, 26 Jul 1990 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); 
header("Cache-Control: no-store, no-cache, must-revalidate"); 
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
session_start();
include("mysql.php");

echo "<script type=\"melp\">var tijd=10000;</script>"; 
?>

Owner of DBIT Consultancy | DJ BassBrewer


Acties:
  • 0 Henk 'm!

  • djexplo
  • Registratie: Oktober 2000
  • Laatst online: 07-07 15:40
type=\"melp\" ???, waarom niet gewoon javascript

'if it looks like a duck, walks like a duck and quacks like a duck it's probably a duck'


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
djexplo schreef op vrijdag 10 april 2009 @ 15:18:
type=\"melp\" ???, waarom niet gewoon javascript
Hij heeft 't een beetje héééél letterlijk overgenomen :P :X

Anyhow: gegevens die je via AJAX binnen krijgt zul je moeten interpreteren; je browser zal dat niet op magische wijze voor je (gaan) doen. En daar zijn al genoeg topics over geweest.

[ Voor 49% gewijzigd door RobIII op 10-04-2009 15:23 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 21:07

TeeDee

CQB 241

RobIII schreef op vrijdag 10 april 2009 @ 15:23:
[...]

Hij heeft 't een beetje héééél letterlijk overgenomen :P :X
En daarom had ik het express zo neergezet!

Heart..pumps blood.Has nothing to do with emotion! Bored


Acties:
  • 0 Henk 'm!

  • DennusB
  • Registratie: Mei 2006
  • Niet online
TeeDee schreef op vrijdag 10 april 2009 @ 15:33:
[...]

En daarom had ik het express zo neergezet!
Erg kinderachtig, TR verzonden

Maargoed, ik heb van type maar javascript gemaakt nu.
Helaas blijkt nogsteeds de error naar voren te komen dat 'tijd' niet bestaat

Owner of DBIT Consultancy | DJ BassBrewer


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
DennusB schreef op vrijdag 10 april 2009 @ 15:44:
Helaas blijkt nogsteeds de error naar voren te komen dat 'tijd' niet bestaat
RobIII in "[AJAX & PHP] Elke keer andere timertijd" gelezen?

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • DennusB
  • Registratie: Mei 2006
  • Niet online
Ja gedaan, ook meerdere topics hier doorgelezen, alleen kom ik daar niet helemaal uit.
Zijn vaak erg gecompliceerde voorbeelden.. :/

Owner of DBIT Consultancy | DJ BassBrewer


Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 21:47

Creepy

Tactical Espionage Splatterer

DennusB schreef op vrijdag 10 april 2009 @ 15:44:
[...]


Erg kinderachtig, TR verzonden

Maargoed, ik heb van type maar javascript gemaakt nu.
Helaas blijkt nogsteeds de error naar voren te komen dat 'tijd' niet bestaat
Kinderachtig? neuh, het dwingt je om zelf even na te denken ;)

Bekijk de volledige HTML eens. Als het er zo staat zoals ik nu denk dan staat de script tag waarschijnlijk op de verkeerde plek en type="melp" moet je natuurlijk even aanpassen.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • DennusB
  • Registratie: Mei 2006
  • Niet online
Creepy schreef op vrijdag 10 april 2009 @ 15:55:
[...]

Kinderachtig? neuh, het dwingt je om zelf even na te denken ;)

Bekijk de volledige HTML eens. Als het er zo staat zoals ik nu denk dan staat de script tag waarschijnlijk op de verkeerde plek en type="melp" moet je natuurlijk even aanpassen.
Ik vindt het wel kinderachtig, beetje hetzelfde als dat iemand zegt "Ik heb een netwerk probleem", een willekeurige user zegt daarop "Je lost het op door een nieuwe router van HP te kopen, kost maar 1100 euro".
Vervolgens komt die goedgelovige user erachter dat die router het natuurlijk niet oplost, maar wel 1100 euro lichter ;)

Maargoed, backup ontopic ;)

Die type="melp" is uiteraard al aangepast, maar voor zover ik zie nogsteeds exact dezelfde error.

Owner of DBIT Consultancy | DJ BassBrewer


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
DennusB schreef op vrijdag 10 april 2009 @ 16:01:

Die type="melp" is uiteraard al aangepast, maar voor zover ik zie nogsteeds exact dezelfde error.
Omdat een browser nog steeds niet zomaar scripts die via AJAX binnen komen gaat verwerken. Nogmaals: Lees de topics die ik aangaf eens door. En als dat niet werkt, of als je iets niet snapt, geef dan aan wat je niet snapt. Roepen dat het niet lukt is lekker makkelijk, maar we gaan hier niet je handje vast houden. Ik hoor dus graag wat er niet lukt of wat je niet snapt uit de topics waar ik naar verwees.

[ Voor 6% gewijzigd door RobIII op 10-04-2009 16:06 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • DennusB
  • Registratie: Mei 2006
  • Niet online
RobIII schreef op vrijdag 10 april 2009 @ 16:05:
[...]

Omdat een browser nog steeds niet zomaar scripts die via AJAX binnen komen gaat verwerken. Nogmaals: Lees de topics die ik aangaf eens door. En als dat niet werkt, of als je iets niet snapt, geef dan aan wat je niet snapt. Roepen dat het niet lukt is lekker makkelijk, maar we gaan hier niet je handje vast houden. Ik hoor dus graag wat er niet lukt of wat je niet snapt uit de topics waar ik naar verwees.
Nou hierbij dan wat niet lukt, ik blijf hetzelfde probleem houden.
Ik heb dit stukje code ook nog geprobeerd uit een topic van jouw search:
code:
1
2
var myNode = document.createTextNode(http2.responseText); 
document.getElementById('div_die_er_al_staat').appendChild(myNode);

Helaas, dat print gewoon de letterlijke html code op het scherm :|

Owner of DBIT Consultancy | DJ BassBrewer


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
DennusB schreef op vrijdag 10 april 2009 @ 16:20:
[...]


Nou hierbij dan wat niet lukt, ik blijf hetzelfde probleem houden.
Ik heb dit stukje code ook nog geprobeerd uit een topic van jouw search:
code:
1
2
var myNode = document.createTextNode(http2.responseText); 
document.getElementById('div_die_er_al_staat').appendChild(myNode);

Helaas, dat print gewoon de letterlijke html code op het scherm :|
En waar voer je die code dan uit? Wat je nu doet is gewoon letterlijk die tekst uit de response halen en in een div vlammen ja; en ja, dan krijg je het dus gewoon te zien. Ik zie nergens waar je (een poging tot) code uit de response uitvoert?
En dat terwijl er al in het tweede topic uit die search een oplossing staat.

En een alternatief is natuurlijk gewoon iets van JSON of XML gebruiken, en in je script die gegevens uitlezen en daar dan mee aan de slag gaan.

Kwestie van (sort of) zoiets teruggeven:
XML:
1
2
3
4
<response>
  <tijd>2789676</tijd>
  <text>foo bar!</text>
</response>

of:
JSON:
1
2
3
4
5
6
{
  "response": {
    "tijd": "3123",
    "text": "foo bar!"
  }
}

En dan de response uitlezen en afhandelen.

[ Voor 18% gewijzigd door RobIII op 10-04-2009 16:47 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • DennusB
  • Registratie: Mei 2006
  • Niet online
Bedankt Roblll. Ik heb nog even dat tweede topic doorgelezen en kwam uit op deze code:
code:
1
2
3
4
5
var html = http2.responseText; 
var re = /<script(\s[^>]*)?>([\s\S]*?)<\/script>/gi, match; 
while ((match = re.exec(html))) eval(match[2]);

document.getElementById("slideDiv").innerHTML = http2.responseText;


Hij refresht de pagina 1 keer, en daarna verschijnt in IE alsnog de melding dat tijd niet bestaat.
Ik dacht even dat het was opgelost, maar helaas :| Ik zal zelf wel iets grondig fout doen, maar ben erg benieuwd wat.

Owner of DBIT Consultancy | DJ BassBrewer


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

DennusB schreef op vrijdag 10 april 2009 @ 16:01:
[...]


Ik vindt het wel kinderachtig, beetje hetzelfde als dat iemand zegt "Ik heb een netwerk probleem", een willekeurige user zegt daarop "Je lost het op door een nieuwe router van HP te kopen, kost maar 1100 euro".
Vervolgens komt die goedgelovige user erachter dat die router het natuurlijk niet oplost, maar wel 1100 euro lichter ;)
Dat is in zijn geheel niet vergelijkbaar. Zeggen dat zo'n nieuwe router het probleem oplost is gewoon liegen, wat TeeDee doet is proberen jou na te laten denken voordat je iets overneemt.

We zijn er op GoT niet om je probleem op te lossen, we zijn hier om je te helpen jezelf te helpen. Zomaar iets klakkeloos overnemen zonder te weten wat het doet en vervolgens ook nog verwachten dat het werkt is naïef en daarnaast ook dom want je zal daar niets van opsteken. Als je dat kinderachtig vindt, dan zou je elke leraar ook kinderachtig moeten noemen. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • compufreak88
  • Registratie: November 2001
  • Laatst online: 02-05 17:51
Zoals RobIII al zei, is het veel makkelijker als je gewoon de gegevens rechtstreeks in javascript ophaalt, ipv proberen javascript te laten uitvoeren.

je kan toch gewoon doen:

JavaScript:
1
2
//Is een versimpeld voorbeeld
var tijd = http2.responseText;


Als je meer gegevens nodig hebt, dan zul je zoals RobII zei, XML of JSON moeten gebruiken.
Pagina: 1