MiniJeffrey
Legacy Member
Jow mede-webdevelopers.
Ik ben momenteel bezig aan een groot project, waarbij een site beheerd wordt door een backend (die we in team van 0 zelf schrijven). Nu willen we natuurlijk dat alles zo vlot en goed mogelijk werkt, dus willen we niet altijd volledige page-reloads wanneer we een kleine setting in de backend veranderen. Een ajax-request en een dynmaische aanpassing van de backend zoner reload met andere woorden dus.
Nu, ajax etc. werkend krijgen is geen probleem, maar dan kwamen enkele vragen/problemen opduiken:
1: Wat doe je wanneer javascript disabled is?
Kan je dit opvangen op één of andere manier en een alternatieve methode laten uitvoeren ( ?action=xxx), waarbij er dus wel een page-reload gebeurt. Het mag namelijk niet de bedoeling zijn dat de backend compleet onbruikbaar wordt wanneer een gebruiker javascript (om welke reden dan ook) uitgeschakeld heeft.
2: Gelijkaardig als vraag 1, hoe kan je de alternatieve methode laten uitvoeren wanneer de ajax-request failt?. Ik heb bijvoorbeeld een anchor met een onclick-action die ajax oproept om een setting in de database te gaan aanpassen. Dit verloopt asynchronous, belangrijk! Hoe kan ik nu op een of andere manier laten weten aan mijn browser dat de javascript failde (request kan niet gemaakt worden, het antwoord van de server komt niet of is fout, ...)? Door het feit dat het asynchronous is wacht de browser namelijk niet om de code verder uit te voeren. Dus als plots het antwoord van de server binnenkomt via ajax, en dan blijkt fout te zijn, kan ik niet meer de href aanroepen?
Onderstaand een versimpeld voorbeeld:
HTML
Ajax
Ik ben momenteel bezig aan een groot project, waarbij een site beheerd wordt door een backend (die we in team van 0 zelf schrijven). Nu willen we natuurlijk dat alles zo vlot en goed mogelijk werkt, dus willen we niet altijd volledige page-reloads wanneer we een kleine setting in de backend veranderen. Een ajax-request en een dynmaische aanpassing van de backend zoner reload met andere woorden dus.
Nu, ajax etc. werkend krijgen is geen probleem, maar dan kwamen enkele vragen/problemen opduiken:
1: Wat doe je wanneer javascript disabled is?
Kan je dit opvangen op één of andere manier en een alternatieve methode laten uitvoeren ( ?action=xxx), waarbij er dus wel een page-reload gebeurt. Het mag namelijk niet de bedoeling zijn dat de backend compleet onbruikbaar wordt wanneer een gebruiker javascript (om welke reden dan ook) uitgeschakeld heeft.
2: Gelijkaardig als vraag 1, hoe kan je de alternatieve methode laten uitvoeren wanneer de ajax-request failt?. Ik heb bijvoorbeeld een anchor met een onclick-action die ajax oproept om een setting in de database te gaan aanpassen. Dit verloopt asynchronous, belangrijk! Hoe kan ik nu op een of andere manier laten weten aan mijn browser dat de javascript failde (request kan niet gemaakt worden, het antwoord van de server komt niet of is fout, ...)? Door het feit dat het asynchronous is wacht de browser namelijk niet om de code verder uit te voeren. Dus als plots het antwoord van de server binnenkomt via ajax, en dan blijkt fout te zijn, kan ik niet meer de href aanroepen?
Onderstaand een versimpeld voorbeeld:
HTML
Code:
<a onclick="doeIets()" href="?action=doeIets" > Klik mij! </a>
<!-- De href mag dus enkel uitgevoerd worden als de onclick faalt of niet uitgevoerd kan worden -->
Ajax
Code:
function createRequest(){
try{
request = new XHTMLHttpRequest();
}
catch(tryMS){
try{
request = new ActiveXObject("Msxml2.XMLHTTP");
}
catch(otherMS){
try{
request = new ActiveXObject("Microsoft.XMLHTTP");
}
catch(failed){
request = null
}
}
}
return request;
}
function doeIets(){
request = createRequest(); //functie die een request aanmaakt en teruggooit
if(request != null){
var url = 'ajax_actions.php?goal=doeIets';
request.open("GET", url, true);
request.onreadystatechange = displayDetails;
request.send(null);
}
else{
[B]//er ging iets mis met de request, de href moet uitgevoerd worden[/B]
}
}
function displayDetails(){
if(request.readyState == 4){
if(request.status == 200){
resp = request.responseText;
if(resp == 1){
[B]// De ajax werkte, de href moet niet uitgevoerd worden[/B]
}
else{
[B]// de ajax werkte niet, de href moet wel uitgevoerd worden[/B]
}
}
}
}
