Ajax refresh php script en div

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Marco Hendriks

Marco Hendriks

26/09/2012 14:35:12
Quote Anchor link
Hoe kan ik het beste met Ajax een div en een PHP script tegelijker tijd reloaden zonder dat natuurlijk de hele pagina refreshed (dit bijv om de 30 sec). Ik heb het al voor elkaar gekregen met een scriptje dat de div reload alleen nu de PHP file nog..

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?
    <script>
        var
auto_refresh = setInterval(
        function()
        {

               $('.photobox').fadeOut('slow').load('twitterfeed.php,.photobox,').fadeIn("slow");
        },
30000);
    </script>

?>
 
PHP hulp

PHP hulp

20/04/2024 16:13:47
 
- Ariën  -
Beheerder

- Ariën -

26/09/2012 14:37:53
Quote Anchor link
Wat wil je met je PHP-file precies doen? Die geeft gewoon verder de output die je wilt hebben. Je .photobox, argument in de load() lijkt me overbodig.
Gewijzigd op 26/09/2012 14:38:43 door - Ariën -
 
Frank WD

Frank WD

26/09/2012 14:40:50
Quote Anchor link
Ik heb totaal geen verstand van Ajax.

Als ik na deze stukje code kijken, dan zou ik zeggen dat de Ajax reload wel werk zoals je zelf zeg al zegt. Uit ervaring met een div reload weet ik dat je vaak zit met een chache van je browser. Je zou daarom eens kunnen kijken naar een header die de chache leegt bij het reloaden.

Mijn excuses als deze stelling niet klopt. Zoals gezegd weet ik niet veel van Ajax af.
 
Marco Hendriks

Marco Hendriks

26/09/2012 14:42:55
Quote Anchor link
De bedoeling is dat hij de foto's van mijn twitterloader opnieuw laad zodat als er nieuwe tweets zijn dat hij deze automatisch om de zoveel seconden inlaad.
 
- Ariën  -
Beheerder

- Ariën -

26/09/2012 14:43:03
Quote Anchor link
Je hebt toch al dat hij het laadt, je AJAX implementatie heb je al voor elkaar.
Om te voorkomen dat de pagina wordt gecached kan je in PHP deze header meegeven:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Cache-Control: no-cache");
header("Pragma: no-cache");
?>


En wat je script verder doet, je moet zelf inbouwen dat hij de tweets ophaalt. Daar zijn wel een hoop PHP-libraries voor.
Gewijzigd op 26/09/2012 14:45:29 door - Ariën -
 
Marco Hendriks

Marco Hendriks

26/09/2012 14:47:08
Quote Anchor link
waar plaats je dit stukje script in de header?
 
Frank WD

Frank WD

26/09/2012 14:47:54
Quote Anchor link
Aar, wat je zegt dat wist ik al en vertelde ik ook hier boven.
Maar wat ik mij nu wel afvraag eigenlijk.

Als je een div wilt reloaden dan betekend het in mijn ogen ook dat die div gevuld word door een include. Hoe zou je dan te werk moeten gaan? Want een header zou dan toch niet werken? Of zit ik er nu even naast.
 
Marco Hendriks

Marco Hendriks

26/09/2012 14:59:35
Quote Anchor link
Het lijkt niet de oplossing te zijn. Net getest maar zo gauw ik hem refresh in de browser komen er nieuwe tweets bij maar via de ajax oplossing niks ...
 
- Ariën  -
Beheerder

- Ariën -

26/09/2012 15:03:56
Quote Anchor link
Met AJAX doe je een XmlHttpRequest naar een pagina toe, om deze in een HTML-element te laden. Include is verder niets meer dan een PHP-onderdeel die in dat PHP-script hoort.

Bij het includen (bevoorbeeld van db-connectie opties naar je PHP-script) behoudt je altijd het pad naar waar het daadwerkelijke PHP-bestand staat.

Voor een dergelijk iets heb ikzelf een betere implementatie geschreven:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
loadItem();

function loadItem() {
        $.ajax({
            url: "script.php",
            cache: false,
            success: function(html){
                $(".result").empty().html(html);
                setTimeout(function () {
                    loadItem();
                }, 30000);
            },
            error:function (xhr, ajaxOptions, thrownError){
                    $(".result").empty().html('Er is een fout opgetreden:'+ xhr.status + ' '+ thrownError);
                }    
        });
    }

Misschien kan je hier wat mee? Ik vind het beter werken dan load(), plus dat er foutafhandeling in zit.

SetInterval is overigens niet de beste werkwijze, deze kan na verloop van tijd zeer inefficient werken, maar hoe en wat mag iemand anders uitleggen in het verhaal: setTimeout vs. SetInterval, als ik het goed heb.
Gewijzigd op 26/09/2012 15:09:33 door - Ariën -
 
Marco Hendriks

Marco Hendriks

26/09/2012 15:22:42
Quote Anchor link
Waar plaats ik dit script boven aan of gewoon bij mijn div's?
 
- Ariën  -
Beheerder

- Ariën -

26/09/2012 15:24:04
Quote Anchor link
Dit is Javascript met jQuery. Bij voorkeur in de <head> of beter zelfs in een los .js bestand.
Gewijzigd op 26/09/2012 15:24:38 door - Ariën -
 
Marco Hendriks

Marco Hendriks

26/09/2012 15:29:02
Quote Anchor link
Pff ook dat werkt blijkbaar niet ik snap er niks van...


Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?

[code]<?php
    include 'twitterfeed.php';  
    include 'twitterfeed2.php';
    include 'followpict.php';
?>


<html xmlns="http://www.w3.org/1999/xhtml">
<DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<head>
    <title>scriptie De effecten van The internet of things</title>
    <link rel="stylesheet" media="all" href="style.css">
    <script type="text/javascript" src="js/jquery.js"></script>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.0/jquery.min.js"></script>

    <?
        include 'js/timer.js';
    ?>

    
    <script>
    loadItem();

    function loadItem() {
            $.ajax({
                url: "twitterfeed.php",
                cache: false,
                success: function(html){
                    $(".result").empty().html(html);
                    setTimeout(function () {
                        loadItem();
                        $('.photobox').fadeOut('fast').load('.photobox').fadeIn("fast");
                    }, 5000);
                },
                error:function (xhr, ajaxOptions, thrownError){
                        $(".result").empty().html('Er is een fout opgetreden:'+ xhr.status + ' '+ thrownError);
                    }    
            });
        }
    </script>
    
</head>

<body>
?>


Dit is wat ik nu heb heb ik daar misschien iets verkeerd gedaan?
Gewijzigd op 26/09/2012 15:34:13 door Marco Hendriks
 
- Ariën  -
Beheerder

- Ariën -

26/09/2012 16:04:57
Quote Anchor link
Kan je in het vervolg wat uitgebreider zijn dan 'werkt niet'.
- Waar start je je jQuery??
- En waarom include je hier twitterfeed? Je weet dat je nu met AJAX doet?
Gewijzigd op 26/09/2012 16:09:44 door - Ariën -
 
Marco Hendriks

Marco Hendriks

26/09/2012 16:10:12
Quote Anchor link
Zo gauw ik deze weg haal krijg ik een foutmelding dat hij de twitter class niet kan vinden. En het gene dat hij niet doet is het PHP bestand reloaden.

Het gene dat ik zou willen is dat een script mijn PHP script bijv om de 30 sec reload
zodat alles dat nieuw is ingeladen word.
 
- Ariën  -
Beheerder

- Ariën -

26/09/2012 16:11:23
Quote Anchor link
Als ik jouw was zou ik eerst maar eens jQuery starten:
http://docs.jquery.com/How_jQuery_Works

Ik kan me niet voorstellen dat je die twitterfeed op je index.php wilt includeren. Dat hele script laad je al in via jQuery's AJAX.
Gewijzigd op 26/09/2012 16:12:28 door - Ariën -
 
Marco Hendriks

Marco Hendriks

26/09/2012 16:18:06
Quote Anchor link
Ik ken de Jquery basics. En als ik hem inlaad via het ajax script dn krijg ik een foutmelding.
 
- Ariën  -
Beheerder

- Ariën -

26/09/2012 16:18:54
Quote Anchor link
Een geheime foutmelding he?????
Toevallig foutmelding 007?
Gewijzigd op 26/09/2012 16:19:15 door - Ariën -
 
Marco Hendriks

Marco Hendriks

26/09/2012 16:26:09
Quote Anchor link
Fatal error: Class 'Twitter' not found in /Applications/XAMPP/xamppfiles/htdocs/Scriptie/index.php on line 44

Sorry dit is de error
 
- Ariën  -
Beheerder

- Ariën -

26/09/2012 16:28:17
Quote Anchor link
dan is de Twitterclass niet gevonden. Wat staat er aan relevante code in twitterfeed?
Ik vermoed dat je daar je class moet includeren. Niet in je index.php
 
Marco Hendriks

Marco Hendriks

26/09/2012 16:32:54
Quote Anchor link
In de index laad ik de data in doormiddel van een loop die gekoppeld is aan de twitter class.
 
- Ariën  -
Beheerder

- Ariën -

26/09/2012 16:34:31
Quote Anchor link
Nee, de index.php gebruik je alleen maar om de twitterfeed in te laden via AJAX!

Anders kan je net zo goed geen AJAX gebruiken.... :P
Gewijzigd op 26/09/2012 16:35:41 door - Ariën -
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.