AJAX
AJAX (asynchroon javascript and xml) en een klein beetje Javascript events.
Gesponsorde koppelingen
Inhoudsopgave
- Introductie/verklaring van het buzz-word
- Javascript Events
- Javascript Events (overbodige extra's)
- Het XMLHTTPRequest object - het object aanmaken
- Het XMLHTTPRequest object - het object zijn parame
- Het XMLHTTPRequest object - de cliff-hanger verkla
- De afhandeling van de vraag
- De 4 manieren van het schrijven van data
- Manier 1: Gewone HTML
- Manier 2: Platte tekst
- Manier 3: Als XML
- Manier 4: JSON
44 reacties op 'AJAX'
Gesponsorde koppeling
FF een reactie'tje op dat JSON. eval() is een functie die de code die hij inslikt uitvoert:
Het idee achter eval is dat je de code dynamisch kunt genereren:
En zo kun je de var 'response' natuurlijk vervangen door hetgene dat de server via ajax heeft gegeven
Verder is het een heel relaxte tut, echt precies wat ik weten wilde :)
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?
<script type="text/javascript">
response = "datDing = 'Goeiemorguh'"; // datDing = 'Goeiemorguh' moet uitgevoerd worden
eval(response);
alert(datDing); // en inderdaad, de variabele "datDing" is nu gevult met de string "Goeiemorguh";
</script>
?>
<script type="text/javascript">
response = "datDing = 'Goeiemorguh'"; // datDing = 'Goeiemorguh' moet uitgevoerd worden
eval(response);
alert(datDing); // en inderdaad, de variabele "datDing" is nu gevult met de string "Goeiemorguh";
</script>
?>
Het idee achter eval is dat je de code dynamisch kunt genereren:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?
<script type="text/javascript">
var tijd = "morguh";
response = "datDing = 'Goeie" + tijd + "'";
eval(response);
alert(datDing);
</script>
?>
<script type="text/javascript">
var tijd = "morguh";
response = "datDing = 'Goeie" + tijd + "'";
eval(response);
alert(datDing);
</script>
?>
En zo kun je de var 'response' natuurlijk vervangen door hetgene dat de server via ajax heeft gegeven
Verder is het een heel relaxte tut, echt precies wat ik weten wilde :)
De JSON manier was nieuw voor mij, maar is net iets uitgebreider dan Rolf zegt. Naja, het werkt inderdaad als een soort serialize() bekend uit PHP.
Voorbeeld van code:
bron: http://www.quirksmode.org/blog/archives/2005/12/the_ajax_respon.html
Meer leesvoer:
http://www.crockford.com/JSON/index.html
http://en.wikipedia.org/wiki/JSON
Voorbeeld van code:
Code (php)
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
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
{"books":[{"book":
{
"title":"JavaScript, the Definitive Guide",
"publisher":"O'Reilly",
"author":"David Flanagan",
"cover":"/images/cover_defguide.jpg",
"blurb":"Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
}
},
{"book":
{
"title":"DOM Scripting",
"publisher":"Friends of Ed",
"author":"Jeremy Keith",
"cover":"/images/cover_domscripting.jpg",
"blurb":"Praesent et diam a ligula facilisis venenatis."
}
},
{"book":
{
"title":"DHTML Utopia: Modern Web Design using JavaScript & DOM",
"publisher":"Sitepoint",
"author":"Stuart Langridge",
"cover":"/images/cover_utopia.jpg",
"blurb":"Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
}
}
]}
{
"title":"JavaScript, the Definitive Guide",
"publisher":"O'Reilly",
"author":"David Flanagan",
"cover":"/images/cover_defguide.jpg",
"blurb":"Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
}
},
{"book":
{
"title":"DOM Scripting",
"publisher":"Friends of Ed",
"author":"Jeremy Keith",
"cover":"/images/cover_domscripting.jpg",
"blurb":"Praesent et diam a ligula facilisis venenatis."
}
},
{"book":
{
"title":"DHTML Utopia: Modern Web Design using JavaScript & DOM",
"publisher":"Sitepoint",
"author":"Stuart Langridge",
"cover":"/images/cover_utopia.jpg",
"blurb":"Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
}
}
]}
Meer leesvoer:
http://www.crockford.com/JSON/index.html
http://en.wikipedia.org/wiki/JSON
Yup da klopt zo maken ze bijvoorbeeld ook dynamische tellers op de statische .html-pagina's van Freewebs, en zo'n dynamisch gegenereerd .js ziet er dan uit als
document.write("<img src='counter98530.jpg'></img>");
maar je kunt het ook gebruiken om dynamisch gegevens door te zenden.. het is idd alleen lang niet zo snel en flexibel als bijv. xml via XMLHTTPRequest
document.write("<img src='counter98530.jpg'></img>");
maar je kunt het ook gebruiken om dynamisch gegevens door te zenden.. het is idd alleen lang niet zo snel en flexibel als bijv. xml via XMLHTTPRequest
Dat zou wel eens nodig kunnen zijn inderdaad. (Mijn prototype.js doet het ook, had het alleen nog niet gezien. prototype.js is trouwens echt een aanrader voor iedereen die te lui is om kilometers functies te schrijven en dingen uit te zoeken.)
Trouwens, als je dan toch bezig bent, in het geval van POST, moet je eigenlijk ook even deze meesturen:
xmlhttp.setRequestHeader('Connection', 'close');
Dat voorkomt problemen (bugs) in Mozilla.
Ik zal het even opnemen in het artikel. Dankje Stefan
Trouwens, als je dan toch bezig bent, in het geval van POST, moet je eigenlijk ook even deze meesturen:
xmlhttp.setRequestHeader('Connection', 'close');
Dat voorkomt problemen (bugs) in Mozilla.
Ik zal het even opnemen in het artikel. Dankje Stefan
Helaas kan ik geen pagina's toevoegen, maar indien ik het wel kon wil ik toch nog even devolgende links aan jullie voorleggen. Het is echt een enorme hype tegenwoordig om toolkits en frameworks te maken, en zeker in combinatie met XHR. Dus daarom is het misschien toch nuttig om niet gewoon vanaf de grond te beginnen, maar vast een voorsprong te pakken door een kant-en-klare lading functies in gebruik te nemen.
Zelf gebruik ik prototype erg veel. Simpelweg omdat er allemaal nuttige dingen inzitten en het leven aanzienlijk lichter maakt :) Helaas is het originele project niet al te best gedocumenteerd, maar dit artikel helpt je aardig verder met de meest nuttige features. Prototype doet het overigens heel erg goed samen met script.aculo.us, een lading effecten en drag&drop functies. Een heel mooi voorbeeld van een erg sterke implementatie in een framework van deze twee toolkits is ruby on rails. Bij mijn weten zijn Cake en Prado de PHP frameworks die er het dichtst bij in de buurt komen. Zie ook Sajax. Ik geloof dat er zelfs een Pear package is die vergelijkbare functionaliteit biedt.
Andere koek is de Dojo toolkit. Deze is zo uitgebreid dat het je de mogelijkheden biedt om hele interfaces ermee te bouwen. Naast allemaal XHR functies (dojo.io.bind) (ook cross-site schijnt) zijn er ook nog een hele lading functies voor effecten (vergelijkbaar met script.aculo.us), widgets (kalenders e.d.), flash support voor opslag van veel data aan de client-side (soort overgrote cookies), drag&drop, buttons etc. etc. Uiteraard heeft het alle functionaliteit die Prototype heeft ook in zich. Dit is bij mijn weten verreweg de meest complete open-source javascript bibliotheek die er te krijgen is op het moment.
Mochikit is een beetje wat Dojo is, maar dan heel erg veel lichter. Mochikit heeft een beetje XHR, een beetje effecten, een beetje drag&drop, en interpreter enz. Eigenlijk alleen de basis-functies die je echt nodig hebt bij het maken van een website die voldoet aan het ajax-buzzword. Het voordeel is dat Mochikit licht is. Het downloaden van enorme JS-bestanden zoals bij script.aculo.us & dojo is niet van toepassing.
Nog even het vermelden waard is Rico. Het is een beetje vergelijkbaar met Mochikit. Het heeft al zijn voor- en nadelen. Het heeft alleen een andere programmeerstyle en wat andere functies.
Zelf gebruik ik prototype erg veel. Simpelweg omdat er allemaal nuttige dingen inzitten en het leven aanzienlijk lichter maakt :) Helaas is het originele project niet al te best gedocumenteerd, maar dit artikel helpt je aardig verder met de meest nuttige features. Prototype doet het overigens heel erg goed samen met script.aculo.us, een lading effecten en drag&drop functies. Een heel mooi voorbeeld van een erg sterke implementatie in een framework van deze twee toolkits is ruby on rails. Bij mijn weten zijn Cake en Prado de PHP frameworks die er het dichtst bij in de buurt komen. Zie ook Sajax. Ik geloof dat er zelfs een Pear package is die vergelijkbare functionaliteit biedt.
Andere koek is de Dojo toolkit. Deze is zo uitgebreid dat het je de mogelijkheden biedt om hele interfaces ermee te bouwen. Naast allemaal XHR functies (dojo.io.bind) (ook cross-site schijnt) zijn er ook nog een hele lading functies voor effecten (vergelijkbaar met script.aculo.us), widgets (kalenders e.d.), flash support voor opslag van veel data aan de client-side (soort overgrote cookies), drag&drop, buttons etc. etc. Uiteraard heeft het alle functionaliteit die Prototype heeft ook in zich. Dit is bij mijn weten verreweg de meest complete open-source javascript bibliotheek die er te krijgen is op het moment.
Mochikit is een beetje wat Dojo is, maar dan heel erg veel lichter. Mochikit heeft een beetje XHR, een beetje effecten, een beetje drag&drop, en interpreter enz. Eigenlijk alleen de basis-functies die je echt nodig hebt bij het maken van een website die voldoet aan het ajax-buzzword. Het voordeel is dat Mochikit licht is. Het downloaden van enorme JS-bestanden zoals bij script.aculo.us & dojo is niet van toepassing.
Nog even het vermelden waard is Rico. Het is een beetje vergelijkbaar met Mochikit. Het heeft al zijn voor- en nadelen. Het heeft alleen een andere programmeerstyle en wat andere functies.
Misschien ook een handige tip voor mensen die met cached pagina's zitten
te worstelen:
Als je de query van de url uniek maakt, wordt de pagina nooit uit de cache gehaald, b.v. :
P.s.
Ik zie ook nog allemaal frameworks voorbij vliegen, kwou dan toch
ook nog even jQuery onder de aandacht brengen :-)
te worstelen:
Als je de query van de url uniek maakt, wordt de pagina nooit uit de cache gehaald, b.v. :
Code (php)
1
2
3
4
2
3
4
<?
var uniek = (new Date()*Math.random());
var teOpenenPagina = 'http://hoi.nl/index.php?uniekequery=' + uniek;
?>
var uniek = (new Date()*Math.random());
var teOpenenPagina = 'http://hoi.nl/index.php?uniekequery=' + uniek;
?>
P.s.
Ik zie ook nog allemaal frameworks voorbij vliegen, kwou dan toch
ook nog even jQuery onder de aandacht brengen :-)
Hey
ik ben nu een beetje met ajax bezig en alles werkt goed eindelijk :d
Ik nu nu alleen niet dat mensen mijn php pagina's kunnen bekijken en ik vond hier een manier hoe dat kon.
Door dit te gebruiken:
Ik vraag me alleen af waar ik deze zin moet plaatsen? Ik heb het al op een paar plekken geprobeerd maar steeds geeft hij een error ....
Ik gebruik prototype 1.4.0 en mijn ajax tests zijn hier te vinden: http://www.theschoolcriminals.com/ajax/
Kan iemand mij helpen en vertellen waar ik die zin moet plaatsen?
Alvast bedankt!
ik ben nu een beetje met ajax bezig en alles werkt goed eindelijk :d
Ik nu nu alleen niet dat mensen mijn php pagina's kunnen bekijken en ik vond hier een manier hoe dat kon.
Door dit te gebruiken:
Ik vraag me alleen af waar ik deze zin moet plaatsen? Ik heb het al op een paar plekken geprobeerd maar steeds geeft hij een error ....
Ik gebruik prototype 1.4.0 en mijn ajax tests zijn hier te vinden: http://www.theschoolcriminals.com/ajax/
Kan iemand mij helpen en vertellen waar ik die zin moet plaatsen?
Alvast bedankt!
Ik denk dat je met [red]..[/red] steeds N.B. bedoelt, want de hele tutorial is van jou, dus alles moet tussen [red] en [/red].
Boeiend :)
Boeiend :)
Edit:
[quote]Manier 1: Gewone HTML
Deze heb ik al hierboven in mijn voorgaande voorbeelden gebruikt, omdat deze de makkelijkste methode is.
Maar daarbij ook de smerigste. Je stuurt namelijk allemaal zooi op die de browser ook prima zelf kan: de opmaak. Een antwoord wordt daardoor vele malen groter en minder abstract. Die abstractie is makkelijk bij het maken van meerdere applicaties, of het aanpassen van het uiterlijk. Heb je die abstractie niet, dan moet je dus ook je PHP-bestanden allemaal aanpassen.[/quote]
En dan is natuurlijk de vraag, waar leg je je abstractie neer, by PHP, of bij JavaScript. Ik zou het wel weten, PHP. Dus je stuurt opmaak mee, want dat moet je javascript niet laten doen...
Deze heb ik al hierboven in mijn voorgaande voorbeelden gebruikt, omdat deze de makkelijkste methode is.
Maar daarbij ook de smerigste. Je stuurt namelijk allemaal zooi op die de browser ook prima zelf kan: de opmaak. Een antwoord wordt daardoor vele malen groter en minder abstract. Die abstractie is makkelijk bij het maken van meerdere applicaties, of het aanpassen van het uiterlijk. Heb je die abstractie niet, dan moet je dus ook je PHP-bestanden allemaal aanpassen.[/quote]
En dan is natuurlijk de vraag, waar leg je je abstractie neer, by PHP, of bij JavaScript. Ik zou het wel weten, PHP. Dus je stuurt opmaak mee, want dat moet je javascript niet laten doen...
t vercetti schreef op 26.03.2007 12:26:
En dan is natuurlijk de vraag, waar leg je je abstractie neer, by PHP, of bij JavaScript. Ik zou het wel weten, PHP. Dus je stuurt opmaak mee, want dat moet je javascript niet laten doen...
Ligt eraan. Je elimineert dan daarmee ook meteen de manier om een andere client dan jouw Javascript code als client toegang te bieden. Even een flash-versie maken zal dan aanzienlijk lastiger worden.
Daarnaast wordt je transmissie groter. Het idee van XMLHTTP is dat je zo min mogelijk opnieuw hoeft te laden, althans, dat is wat ik er onder versta.
En je bent direct gebonden aan je opmaak. Ik gebruik zelf vaak dezelfde 'informatiestroom' op meerdere plekken, in andere opmaak. In jouw situatie zou ik voor iedere plek een apart deel in PHP moeten schrijven.
Aan de andere kant heb je ook weer gelijk. Ik heb zelf eens geprobeerd om een website een beetje als een X-server te maken, dus dat je eigenlijk alles kan programmeren in PHP, en dat PHP als het ware de rest zelf wel bedenkt. Als dit goed werkt kan je veel sneller webapplicaties maken dan waneer je Javascript en PHP als apart neemt en is het vrij simpel om tegelijkertijd, met dezelfde bron, een niet-javascript versie beschikbaar te stellen. Nadeel is wel dat het veel meer van je server eist (server-side state!) en dat je de flexibiliteit van Javascript mist.
Maar waarom zou jij niet de opmaak door Javascript laten doen?
Onderstaande URL is een link naar een tutorial op W3Schools en kan ook een interessante tutorial zijn voor veel mensen. Vind hem zelf nog wat duidelijker.
http://www.w3schools.com/ajax/default.asp
http://www.w3schools.com/ajax/default.asp
Voor wie wil weten hoe je een JSON object in php aanmaakt en doorstuurt:
heel simpel eigenlijk.
bv.
(php)
Die echo kan je dan in javascript direct gebruiken als object.
de respons:
(javascript)
...
if(http.readyState == 4)
{
var m_object = eval('(' + http.responseText + ')');
var objectje = m_object.objectnaam;
...
}
die var objectje kan je in javascript dus gebruiken. Het zal de zelfde properties hebben als $m_object.
methodes en constructors worden uiteraard niet meegestuurd.
heel simpel eigenlijk.
bv.
(php)
Code (php)
1
2
3
4
5
2
3
4
5
<?
$m_object = new klassenaam(...);
...
Echo '{"objectnaam":'.json_encode($m_object).'}';
?>
$m_object = new klassenaam(...);
...
Echo '{"objectnaam":'.json_encode($m_object).'}';
?>
Die echo kan je dan in javascript direct gebruiken als object.
de respons:
(javascript)
...
if(http.readyState == 4)
{
var m_object = eval('(' + http.responseText + ')');
var objectje = m_object.objectnaam;
...
}
die var objectje kan je in javascript dus gebruiken. Het zal de zelfde properties hebben als $m_object.
methodes en constructors worden uiteraard niet meegestuurd.
Om te reageren heb je een account nodig en je moet ingelogd zijn.
- Details
Door:
Jelmer rrrr- 5 jaar geleden
- 1.204 x bekeken
- Labels
- Geen tags toegevoegd.
- PHP tutorials opties
- Overig
- Nieuwste PHP tutorials
- PHP tutorial toevoegen

PHP hulp
0 seconden vanaf nu