AJAX - gegeven tonen

Status
Niet open voor verdere reacties.

carlo boy7

Gebruiker
Lid geworden
28 feb 2009
Berichten
156
Ik wil een pagina tonen met de gegevens uit een mysql databace, als iemand zich registreerd moet op een ander pagina komen de gegevens automatich komen te staan. Liefs met ajax zodat de pagina niet rolead. En het liefs dat er dan een popup word getoond.
Hoe moet ik dit gaan doen

alvast bedankt
 
je zal dan een php script moeten maken die alles uit de database vist, en deze dan weergeeft. Dan kan je daarna met wat javascript deze via 'ajax' oproepen.

je php pagina dus:
PHP:
<?php

//test.php
echo "Dit is wat spul uit de database:<br /><br />";

/*
   doe hier wat database-q's, echo troep.
*/

?>
en je javascript:
PHP:
//js
var output = document.getElementById('een_div');

//1. maak httpxml request naar je test.php bestand
//2. lees de text eruit

output.innerHTML = response_text_var;

over het javascript gedeelte heb je mischien wat aan mn javascript / ajax tutorial.
 
bedankt, ik zal wat gaan experimenteren
Ik denk dat ik er wel wat een heb Bedankt!

EDIT:
Jammer laat hij niet steeds het bestand.
Hier is de code die ik van jouw heb:
PHP:
<html>

<head>

<script type='text/javascript'>

//functies
function maakXMLObj()
{
   var objXml = false; 
   try
   {
    // Firefox, Opera 8.0+, Safari
    objXml = new XMLHttpRequest();
   }
   catch (e)
   {
    // Internet Explorer
     try
     {
       objXml = new ActiveXObject("Msxml2.XMLHTTP");
     }
     catch (e)
     {
       try
       {
         objXml = new ActiveXObject("Microsoft.XMLHTTP");
       }
         catch (e)
       {
         alert("Uh-ohw, je browser ondersteund geen AJAX!");
         return false;
       }
     }
   }
   return objXml;
}

function openBestand(bestand)
{
   var objXml = maakXMLObj();

   objXml.open('GET',bestand,false);
   objXml.send(null);

   return objXml.responseText;
}




//nu, de functie uit deel 1, erbij. Comments bij de delen die veranderen:
function veranderObjectText(id, bestand) // bestand, niet meer text
{
   var het_obj = document.getElementById(id);


   var text = openBestand(bestand);  //het bestand uit de parameter

   het_obj.innerHTML = text;
}


</script>

</head>

<body>

<!-- gif plaatje  -->
<img src='../penguin.gif' />
<!-- einde gifplaatje -->

<div id='testDiv' style='width: 300px; height: 100px; border: 1px dotted #f06;'>
Ahgr, niet roze randjes!
</div>
<br /><br />
<a href='#' onclick='veranderObjectText("testDiv","text1.txt");'>begin</a>


</body>

</html>
Als ik text.txt aanpas dan blijf de vorige text gewoon staan, hoe kan ik dit oplosse?

ik wil een beetje dit maken:

van phpfreaz de forum tracker
 
Laatst bewerkt:
dit komt waarschijnlijk omdat de test.txt ge-cache-ed is. Probeer eens ctrl-F5, in plaats van een normale refresh. Anders via het menu de cache legen, en opnieuw je browser opstarten.

ik weet niet precies wat je bedoelt met de van phpfreaz de forum tracker?


:thumb:
 
phpfreakz.nl' -> klik dan in het munu op forum tracker.
Daar word als er nieuwe berichten zijn. Word het nieuwe berichten dik gedrukt. En er word een popup getoond waar staat: Er zijn nieuwe berichten.
Zoiets zou ik ook willen maken.:D
 
waarom wil je dan precies javascript/ajax gebruiken? Dat kan toch ook alleen met php? :thumb:
 
omdat ajax steeds comuniceerd met de server.
Dus als er iets in de databace gebeurt word dat zonder dat de pagina roaload weergeven :)
Ik ben ook al te vreden als hij om de 2 minuten doet roaladen automatich en als er iets bij de databace bij gekomen is, dat er dan een popup word getoond:thumb::thumb:
 
oh, op die manier. Je wilt dus eigenlijk dat om de 2 minuten, het scherm wordt ge-update met data uit de db.

Dat is helemaal niet zo lastig, zoiets:

PHP:
//js

//noot dat de php pagina dus gewoon hetzelfde blijft, je wilt alleen dat het om de 2 minuten opnieuw wordt opgevraagd.
//als je problemen krijgt met dat-ie niet update, ook al is er iets nieuws, moet je maar anti-cache headers in de php file zetten oid.

const TIME_OUT = 1000*60*2; //1000 = 1 seconde, vermenigvuldig met 1 minuut, maal 2 = 2 min's.

function showRecs(where)
{
   var doc = "bla.php";

   //doe hier je 'ajax' stuff, dus open de doc, en lees de text uit.
   //voor het idee staat de text nu in 'results'

   var obj = document.getElementById(where);
   obj.innerHTML = results;

   setTimeout("showRecs('" + where + "');",TIME_OUT);
}
HTML:
<!--je html file wordt zoiets:-->
<html>
<head>
<script type='text/javascript'>
   //hier dus de code van hierboven
</script>
</head>
<body>
<div id='recs'>hier komen de recs</div>

<script type='text/javascript'>
   //roep de functie aan:
   showRecs('recs');
</script>
</body>
</html>

:thumb:
 
Laatst bewerkt:
Bedankt, die had ik nodig:thumb:.

Kan ik dan ook de dingen die erbij komen vet gedrukt tonen met js?
Of moet ik het eerst met php automatich dik maken en dan laten tonen met js?
 
Wanneer wil je precies iets laten dik drukken? Want dat moet natuurlijk wel aan criteria voldoen.

Daar word als er nieuwe berichten zijn. Word het nieuwe berichten dik gedrukt

Hoe werkt dit precies, wat is precies een 'nieuw bericht'? Ik neem aan gewoon de laatste x (10 ofzo?) berichten die gepost zijn? Welk van die x (10) moeten dan dikgedrukt zijn?


:thumb:


[also: het via php doen is een STUK makkelijker]
 
oke, bedankt.. Ik ga het via php doen. :p

Nouw ik zou het proberen uit te leggen.
Eerst worden er 10 nieuwe topics getoond.
(ik noem dat berichten :))
Als er eentje bij die 10 komt dan word die word dan dik gedrukt. Een voorbeeld:
(nu is het 5 want ik weet niet zo veel topics te verzinnen :P)

voor

topic naam: ' datum:
welkom 09-05-09 18:50
vraag : ajax 09-05-09 18 30
Spel : hommels 09-05-09 18:00
dom, domst, dommer 09-05-09 17:50
tellen 09-05-09 16: 30

------------------------------------------------------
na
(nu is molypoly en test-topic erbij gekomen)

topic naam: ' datum:
molypoly 09-05-09 19:11
test-topic 09-05-09 19:10
welkom 09-05-09 18:50
vraag : ajax 09-05-09 18 30
Spel : hommels 09-05-09 18:00

ik zie nu mijn voorbeeld, nauw om de datum enz. uitelijnen werkt dus ook niet:rolleyes::(
 
Hmm, dus het moet worden dikgedrukt als het nieuw is in het track-scherm dus? Dat kan dan dus wel via php, en wel zo:
PHP:
//javascript

//als je de pagina callt, geef je gewoon de laatste topic-tijd mee. Ofzo.
//dus, zoiets:

const TIME_OUT = 1000*60*2; //1000 = 1 seconde, vermenigvuldig met 1 minuut, maal 2 = 2 min's.
var last = "";

function showRecs(where)
{

   var doc = "bla.php?last=" + last;
 
   //doe hier je 'ajax' stuff, dus open de doc, en lees de text uit.
   //voor het idee staat de text nu in 'results'
 
   var obj = document.getElementById(where);
   obj.innerHTML = results;
 
   //nu wordt het tricky. Je moet dus uit zien te vinden wat het laaste topic was.
   //dus, lekker in je 'results' gaan zoeken.
   //mischien is het makkelijkst als 'bla.php' zowiezo helemaal bovenaan het laaste topic-id echo-ed.
   //dan wordt 'last' gewoon restults.substring(0,1); oid. En, je innerHTML wordt dan dus
   // results.substring(1,results.length-1);

   //noot dat dat nooit gaat werken omdat het ID van de laaste post boven de 9 kan zijn (dus meer dan 1 cijfer) maargoed.

   setTimeout("showRecs('" + where + "');",TIME_OUT);
}
en je bla.php (noot: voorbeeld, pseudocode):
PHP:
//bla.php

//hier je 'if isset ?last' etc.
// $last = $_GET['last'];

//echo als 1e je laaste id, zodat je JS code dit kan oppikken:
$q = mysql_query("SELECT id FROM berichten ORDER BY time DESC LIMIT 1");
echo mysql_fetch_row($q)[0];  //oid?
echo "<br />";

//loop door je records heen:
$q = mysql_query("SELECT * FROM berichten ORDER BY time DESC LIMIT 0,10");
while($e = mysql_fetch_object($q))
{
   if($e->id > $last){    //als het id groter is dan het laaste door het JS 'geshowde' id, maak het dik:
      echo "<b>".$e->title."</b>";
   }else{
      echo $e->title;
   }
   echo "<br />";
}
zoiets :)
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan