Session wijzigen d.m.v. Javascript
Ik werk eigenlijk nooit met Javascript. Als ik het al nodig heb dan vind ik meestal wel ergens een werkend stukje script. Maar nu heb ik daar toch een vraagje over:
Is het mogelijk om met Javascript de $_SESSION-waarde te wijzigen en/of uit te lezen? De session staat uiteraard op de server.
SanThe.
Gewijzigd op 14/12/2011 14:03:42 door - SanThe -
Niet direct volgens mij, wel via AJAX calls (waardoor je het feitelijk gewoon via php doet)
Is dat zo even uit te leggen of kan ik beter een complete AJAX-tutorial gaan doornemen.
Code (php)
1
2
3
2
3
Maar met JQuery wat je doet is eigenlijk een call maken naar een normale php pagina.
Dit kan je doen met de functie $.getJSON() of $.post(). Stel je hebt bijvoorbeeld een pagina "test.php" en je wilt die aanroepen met de parameter action=get_id en username=test dan word je call in javascript:
Code (php)
1
$.getJSON("http://www.test.nl/test.php", {action: get_id, username: test}, function(res){});
De output van je php script wordt teruggegeven in de res variabele (kan je zo noemen als je wilt) van de callback functie.
Aan de server kant heb je dus gewoon een php script waarin je alles kunt doen wat je anders ook doet (dus ook met je Session data werken). Het enige wat je moet bedenken is dat je output in JSON formaat is of in XML formaat. Ik werk altijd met JSON, maar beide kan net zo eenvoudig. Als je bijvoorbeeld een array hebt met je output data, hoef je alleen dit te doen:
Aan de client kant komt het terug als een javascript object. stel je array aan de server kant zag er zo uit: result = array('id' => 1) dan kan je aan je in javascript dus de waarde uitlezen met res.id. De functie als eerder genoemd wordt dus bijvoorbeeld:
Code (php)
1
2
3
2
3
$.getJSON("http://www.test.nl/test.php", {action: get_id, username: test}, function(res){
alert(res.id)
});
alert(res.id)
});
Bedenk alleen dat $.getJSON direct een JSON object vertaalt naar een Javascript object en dat teruggeeft. $.post doet dat niet en moet je dus zelf eerst nog de output omzetten naar een javascript object (met $.parseJSON(res)).
Gewijzigd op 14/12/2011 14:25:32 door Erwin H
Zo doe ik het met $.post() en r is dan een json object.
Gewijzigd op 14/12/2011 15:51:13 door Ger van Steenderen
Die toevoeging "json" zou moeten werken, maar die werkt bij mij nooit. Waarom, geen idee, maar vandaar de $.parseJSON() call. Die werkt wel...
Toevoeging op 14/12/2011 15:59:16:
@SanThe, mocht je een puur JS voorbeeld willen laat het dan even weten.
Op het moment 1.5.1, misschien eens upgraden dan...
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
$.ajax({
url: 'url/',
data: {data},
dataType: 'JSON',
type: 'POST',
success: function() {}
});
url: 'url/',
data: {data},
dataType: 'JSON',
type: 'POST',
success: function() {}
});
Je kan als dataType ook 'HTML' gebruiken.
SanThe.
Hier leggen ze alles uit: http://api.jquery.com/jQuery.ajax/ Zitten ook wat voorbeelden tussen.
Niels
Niels bedankt. Daar kan ik mezelf voorlopig wel zoet mee houden.
Niels Kieviet op 14/12/2011 19:09:23:
Je kan als dataType ook 'HTML' gebruiken.
Verrek, moet ik toch eens wat vaker net een pagina verder kijken.... nu doe ik het altijd met JSON omdat ik javascript de HTML laat opmaken, maar het is wel erg handig om te weten. THANKS!
Nu ben ik even in de war, je kan met JSON toch ook HTML doorgeven?
Quote:
"xml": Returns a XML document that can be processed via jQuery.
"html": Returns HTML as plain text; included script tags are evaluated when inserted in the DOM.
"script": Evaluates the response as JavaScript and returns it as plain text. Disables caching by appending a query string parameter, "_=[TIMESTAMP]", to the URL unless the cache option is set to true. Note: This will turn POSTs into GETs for remote-domain requests.
"json": Evaluates the response as JSON and returns a JavaScript object. In jQuery 1.4 the JSON data is parsed in a strict manner; any malformed JSON is rejected and a parse error is thrown. (See json.org for more information on proper JSON formatting.)
"jsonp": Loads in a JSON block using JSONP. Adds an extra "?callback=?" to the end of your URL to specify the callback. Disables caching by appending a query string parameter, "_=[TIMESTAMP]", to the URL unless the cache option is set to true.
"text": A plain text string.
"html": Returns HTML as plain text; included script tags are evaluated when inserted in the DOM.
"script": Evaluates the response as JavaScript and returns it as plain text. Disables caching by appending a query string parameter, "_=[TIMESTAMP]", to the URL unless the cache option is set to true. Note: This will turn POSTs into GETs for remote-domain requests.
"json": Evaluates the response as JSON and returns a JavaScript object. In jQuery 1.4 the JSON data is parsed in a strict manner; any malformed JSON is rejected and a parse error is thrown. (See json.org for more information on proper JSON formatting.)
"jsonp": Loads in a JSON block using JSONP. Adds an extra "?callback=?" to the end of your URL to specify the callback. Disables caching by appending a query string parameter, "_=[TIMESTAMP]", to the URL unless the cache option is set to true.
"text": A plain text string.
Je kan dus een JSON encoded return geven (waarin je uiteraard ook HTML kan hebben staan), of je kan gewoon een complete HTML pagina terugsturen.