Welkom, Gast. Je bent niet ingelogd.

AJAX auto refresh

Thomaz
'
Geplaatst op: 12 Apr 2007, 18:39
PimpCoins: 0
💸+
Bewerken Quote

Hallo,

Ik was aan het oefenen met ajax, en dan een auto refresh, of gewoon met een link hetzelfde bestand aanroepen alleen dan wat anders erin zetten. Alleen dan heb ik een gods kut probleem, namelijk dat de browser dan de boel gaat cachen. Welke manieren zijn hier allemaal voor om dat tegen te gaan, want heb de volgende al gebruikt:

<META Http-Equiv="Cache-Control" Content="no-cache">
<META Http-Equiv="Pragma" Content="no-cache">
<META Http-Equiv="Expires" Content="0">

Mvg. Thomas

[i]Andere manieren van auto refresh zonder dat de gebruiker het zien mogen ook, maar dan wel met een duidelijke (Nederlandse) tutorial![/i]

Volgende vraag:

Hoe kan je een pagina automatisch laten refreshen als er nieuwe gegevens zijn, of om een bepaalde tijd, met ajax?

[Laatst bewerkt door Thomaz op donderdag 12 april 2007, om 19:34]
Saven
admin
Geplaatst op: 12 Apr 2007, 19:24
PimpCoins: 0
💸+
Bewerken Quote

met php headers proberen ofzo?

Thomaz
'
Geplaatst op: 12 Apr 2007, 19:30
PimpCoins: 0
💸+
Bewerken Quote

Het is al gelukt, maar wat ik wilde bereiken lukt jammer genoeg niet,,

Mijn doel was, dat AJAX de pagina automatisch update als er wat nieuws was, maar dat lukte niet, alleen d.m.v een link. Maar dat is weer niet gebruikersvriendelijk.

Florian
kunjeditzien:')?
Geplaatst op: 12 Apr 2007, 19:34
PimpCoins: 0
💸+
Bewerken Quote

Je kunt toch een timer maken in ajax, en die laten checken of de content die je opvraagt nog hetzelfde is als die je op het moment hebt staan.

Ik weet niet of je een library gebruikt, maar met prototype is het volgens mij nog redelijk simpel te doen . Ik weet iig dat het kan, maar of het simpel is niet zeker .

iisys
Hmhm, indeed. whtvr.
moderator
Geplaatst op: 12 Apr 2007, 20:49
PimpCoins: 0
💸+
Bewerken Quote

Florian schreef:

Je kunt toch een timer maken in ajax, en die laten checken of de content die je opvraagt nog hetzelfde is als die je op het moment hebt staan.

Ik weet niet of je een library gebruikt, maar met prototype is het volgens mij nog redelijk simpel te doen . Ik weet iig dat het kan, maar of het simpel is niet zeker .


Het is zeker wel simpel.

Op request.html zet je een javascript met de setIntveral oid, weet m niet echt uit m'n hoofd, die om de 15 seconden pagina db.php opvraagt om te controleren of er iets nieuws is.
Als request.html voor t eerst laad, laad hij dus óók uit db.php, die een timestamp meezend in een header (gewoon header('stamp: '.$db['lastPostStamp'])
Die stamp zet je in een javascript variabele door hem op te halen via ajaxobject.getResponseHeader('stamp').
Dan, via de interval, haal je dus om de 15 seconden weer de info op, en als de stamp verschild met de stamp die je al op hebt gehaald, werk je de pagina bij.

Relatief heel simpel.

Thomaz
'
Geplaatst op: 12 Apr 2007, 20:56
PimpCoins: 0
💸+
Bewerken Quote

Het zal wel vrij simpel zijn, maar van je verhaaltje snap ik helaas bijna niks

iisys
Hmhm, indeed. whtvr.
moderator
Geplaatst op: 12 Apr 2007, 21:00
PimpCoins: 0
💸+
Bewerken Quote

Mm ik heb nu waarschijnlijk te weinig tijd om je te helpen, en de rest van t weekend ook niet. Anders zou ik een begin voor je maken.
Ff kijken of t snel lukt.

Mmkay, ik heb hier een simpel begin gemaakt:

ajax.html of whatever yu like

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
<script type="text/javascript" src="ajax.js"></script>
<script type="text/javascript">

var stamp = '';
var file = 'ajax.test.php';

function refr()
{

h.open('get', file);
h.setRequestHeader('i_ajaxed', 'lastPost');
h.onreadystatechange = function()
{
  if (h.readyState == 4 && h.status == 200)
  {
    if (h.getResponseHeader('stamp') != stamp)
    {
      document.getElementById('body').innerHTML = h.responseText;
      stamp = h.getResponseHeader('stamp');
    }
  }
}
h.send(0);
setTimeout('refr();', 7000);
}

setTimeout('refr();', 200);
</script>

<div id="body">Loading...</div>

in ajax.js wordt het HTTPrequestObject aan h toegewezen.

ajax.test.php

1
2
3
4
5
6
7
8
<?php
if ($_SERVER['HTTP_I_AJAXED'] == 'lastPost') 
{
  $stamp = 4;
  header('stamp: '.$stamp);
  echo 'This is stamp '.$stamp;
}
?>

Het php gedeelte moet je zelf maar verzinnen, zet gewoon telkens de timestamp of id van de laatste post oid in de header 'stamp'.

[Laatst bewerkt door iisys op donderdag 12 april 2007, om 21:18]
Thomaz
'
Geplaatst op: 13 Apr 2007, 17:07
PimpCoins: 0
💸+
Bewerken Quote

Ik snap er nog niks van, hij blijft telkens hangen op loading..

Dit is de ajax.test.php:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php 
require_once ("config.php");

if ($_SERVER['HTTP_I_AJAXED'] == 'lastPost')  
{ 
    $query = "SELECT * FROM style";  
    $result = mysql_query($query) or die (mysql_error());  
    while ($sql = mysql_fetch_assoc($result))
    {
     
        $stamp = $sql['id']; 
        header('stamp: '.$stamp); 


        echo $sql['style'];
    }
} 
?>

en dit de ajax.js:

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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
<!-- 
   function create_http_object() 
    { 
        var ActiveXTypes = [ 
            "Microsoft.XMLHTTP", 
            "MSXML2.XMLHTTP.5.0", 
            "MSXML2.XMLHTTP.4.0", 
            "MSXML2.XMLHTTP.3.0", 
            "MSXML2.XMLHTTP" 
        ]; 

        for( var i = 0; i < ActiveXTypes.length; i++ ) 
        { 
            try 
            { 
                return new ActiveXObject( ActiveXTypes[i] ); 
            } 
            catch( e ) 
            { } 
        } 

        try 
        { 
            return new XMLHttpRequest(); 
        } 
        catch( e ) 
        { } 

        return false; 
    } 

    function make_request(url, callback_function, http_method, post_values, return_xml) 
    { 
        http = create_http_object(); 

        if(!http) 
        { 
            alert('Je browser ondersteunt deze feature niet.'); 
            return false; 
        } 

        http.onreadystatechange = function() 
        { 
            if(http.readyState == 4) 
            { 
                if(http.status == 200) 
                { 
                    if(callback_function) 
                    { 
                        if(return_xml) 
                        { 
                            eval(callback_function + '(http.responseXML)'); 
                        } 
                        else 
                        { 
                            eval(callback_function + '(http.responseText)'); 
                        } 
                    } 
                } 
                else 
                { 
                    alert('Error! (' + http.status + ')'); 
                } 
            } 
        } 

        if(!post_values) 
        { 
            post_values = null; 
        } 
        if(!http_method) 
        { 
            http_method = "GET"; 
        } 

        http.open(http_method, url, true); 

        if(http_method == "POST") 
        { 
            http.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); 
        } 

        http.send(post_values); 
    } 
     
    function Ov(result) 
    { 
        document.getElementById('Ov').innerHTML = result; 
    } 
        
    function Ov2(result) 
    { 
        document.getElementById('Ov2').innerHTML = result; 
    } 
    -->

iisys
Hmhm, indeed. whtvr.
moderator
Geplaatst op: 13 Apr 2007, 17:35
PimpCoins: 0
💸+
Bewerken Quote

Mm weetje nog deze line?
if ($_SERVER['HTTP_I_AJAXED'] == 'lastPost')
Dat betekent dus dat je in je Ajax app, na http.open(), die header mee moet sturen.
zet dit onder je http.open():
http.setRequestHeader('i_ajaxed', 'lastPost');

Rene
Professional
Geplaatst op: 13 Apr 2007, 17:36
PimpCoins: 0
💸+
Bewerken Quote

Het domste dat je kunt doen is een Timer of een Interval d'r op gooien. Het kan bij drukke punten redelijke overbelasting veroorzaken bij tonnen van gegevens. Maar dat niet alleen, je bandwidth mag d'r ook aan gaan geloven.

Ik raad je dan een wat moeilijkere methode aan, COMET, Comet is een methode die pas enkelen jaren bestaat en weinig te vinden is omdat niet iedereen het éven kan ontwikkelen. COMET is een connectie tussen server en client die niet ophoud, ook wel een "Keep-Alive" connectie genoemt.

COMET wordt veel gebruikt voor chat applicaties, web-based, en anderen applicaties. COMET update alleen wanneer er gegevens aanwezig zijn, zijn deze d'r niet zal COMET geen moeite doen en gewoon verder "laden", zijn er gegevens zullen deze geoutput worden. Je kunt hier meer informatie over COMET vinden.

Thomaz
'
Geplaatst op: 13 Apr 2007, 17:43
PimpCoins: 0
💸+
Bewerken Quote

Ja leuk rene, heb je een tutorial in NL? Want ik heb al een tijd gezocht daarna maar niks gevonden..

@iisys: Het werkt jammer genoeg nog niet, er staat: Loading.. en onderin de status balk staat een gele uitroep teken met daarachter gereed

iisys
Hmhm, indeed. whtvr.
moderator
Geplaatst op: 13 Apr 2007, 21:32
PimpCoins: 0
💸+
Bewerken Quote

Thomaz schreef:

Ja leuk rene, heb je een tutorial in NL? Want ik heb al een tijd gezocht daarna maar niks gevonden..

Als je t nou gewoon Engels gaat lezen

Thomaz schreef:

@iisys: Het werkt jammer genoeg nog niet, er staat: Loading.. en onderin de status balk staat een gele uitroep teken met daarachter gereed

IE ? Dubbelklik is op dat uitroeptekentje en probeer adhv de error een oplossing te vinden.

Rene, interessant Zal r is naar kijken.

Rene
Professional
Geplaatst op: 13 Apr 2007, 21:32
PimpCoins: 0
💸+
Bewerken Quote

Thomaz schreef:

Ja leuk rene, heb je een tutorial in NL? Want ik heb al een tijd gezocht daarna maar niks gevonden..

Sorry hoor, maar mijn informatie was positief bedoelt, niet negatief. Je had opseminst normaal kunnen reageren.

Anyway, die zijn er niet in het nederlands, er zijn amper mensen die het voor elkaar krijgen dit te produceren laat staan te gaan publiceren als Open Source.

Thomaz
'
Geplaatst op: 13 Apr 2007, 23:13
PimpCoins: 0
💸+
Bewerken Quote

Ag, rene was niet zo bedoeld maar ben al zo lang op zoek, ook naar de comet manier maar telkens niks gevonden. En dus best wel pissig

Maar alsnog bedankt iedereen, en ik hoop dat iisys manier gaat werken. en natuurlijk zijn die comet tutorials welkom!

Died
Geplaatst op: 13 Apr 2007, 23:31
PimpCoins: 0
💸+
Bewerken Quote

Rene schreef:

[...]

Sorry hoor, maar mijn informatie was positief bedoelt, niet negatief. Je had opseminst normaal kunnen reageren.

Anyway, die zijn er niet in het nederlands, er zijn amper mensen die het voor elkaar krijgen dit te produceren laat staan te gaan publiceren als Open Source.


Rene, vat dit niet kwaadaardig op, maar kan jij het zelf ?
Anders zou jij misschien een paar voorbeeldjes laten zien, lijkt mij namelijk ook wel interessant

Thomaz
'
Geplaatst op: 13 Apr 2007, 23:48
PimpCoins: 0
💸+
Bewerken Quote

@iisys: De foutcode is:

Fout: 'h' is niet gedefineerd

iisys
Hmhm, indeed. whtvr.
moderator
Geplaatst op: 14 Apr 2007, 11:28
PimpCoins: 0
💸+
Bewerken Quote

Thomaz schreef:

@iisys: De foutcode is:

Fout: 'h' is niet gedefineerd


Omf Je kan zelf toch wel een oplossing bedenken ?! Misschien komt het doordat jij de var http ipv h gebruikt?!
Moet alles helemaal voorgekauwd worden ?

Died
Geplaatst op: 14 Apr 2007, 18:04
PimpCoins: 0
💸+
Bewerken Quote

iisys schreef:

[...]
Omf Je kan zelf toch wel een oplossing bedenken ?! Misschien komt het doordat jij de var http ipv h gebruikt?!
Moet alles helemaal voorgekauwd worden ?

Kennelijk
Maargoed, ik kreeg van Rene een PM en daar stond in dat Rene ook COMET kon, dus rene, geef aub eens een voorbeeld

Thomaz
'
Geplaatst op: 14 Apr 2007, 18:39
PimpCoins: 0
💸+
Bewerken Quote

iisys schreef:

[...]
Omf Je kan zelf toch wel een oplossing bedenken ?! Misschien komt het doordat jij de var http ipv h gebruikt?!
Moet alles helemaal voorgekauwd worden ?

Ja okee, dat had ik al geprobeerd maar dan geeft die gek genoeg dat http ook niet is gedefinieerd.

Als ik het stuk in de ajax.js zet krijg ik: Object wordt verwacht.

maar wat bedoelen ze daar mee?

[Laatst bewerkt door Thomaz op zaterdag 14 april 2007, om 18:43]
iisys
Hmhm, indeed. whtvr.
moderator
Geplaatst op: 14 Apr 2007, 20:37
PimpCoins: 0
💸+
Bewerken Quote

Thomaz schreef:

[...]
Ja okee, dat had ik al geprobeerd maar dan geeft die gek genoeg dat http ook niet is gedefinieerd.

Als ik het stuk in de ajax.js zet krijg ik: Object wordt verwacht.

maar wat bedoelen ze daar mee?


Niks gek genoeg, je hebt gewoon een fout in je script.
Loop al je scripts is na, kijk of alles goed gedefinieerd is en in de goede volgorde staat.

Thomaz
'
Geplaatst op: 15 Apr 2007, 10:45
PimpCoins: 0
💸+
Bewerken Quote

Oke script nagelopen, foutcode is der uit. Alleen nu nog 1 belangrijk ding. Hij laat de inhoud van ajax.test.php niet zien.

📫

Nieuw privébericht

🔥

Registreren


Login