jQuery post functie in combinatie met CodeIgniter
Hiervoor werkte ik binnen CodeIgniter altijd met de jQuery.get functie. Nu wil ik gebruik maken van de jQuery.post functie omdat ik niet meer gelimiteerd wil zijn door de parameters die ik in een CodeIgniter URL mee kan geven.
Ik krijg het echter niet voor elkaar om POST data te ontvangen aan de serverkant. Ik begrijp hoe de functie gebruikt moet worden en hij werkt wanneer ik hem buiten CodeIgniter om probeer. Wanneer ik echter in de request zoiets als mijnwebsite.nl/controller/function opneem, dan is de $_POST array in de betreffende function helemaal leeg... Ik vroeg me dus af of iemand van jullie weet of dit iets te maken heeft met de routing module van CodeIgniter...
Ik hoop dat iemand hiermee raad weet, ik zou er in ieder geval enorm mee geholpen zijn!
http://codeigniter.com/user_guide/libraries/input.html
maar ik vind het vreemd dat $_POST leeg is.
Weet je zeker dat je niet ergens onderweg geredirect wordt? Want dan is de kans vrij groot dat de browser een GET request doet naar de nieuwe locatie, en dan is $_POST idd laag.
Volgens maar ik vind het vreemd dat $_POST leeg is.
Weet je zeker dat je niet ergens onderweg geredirect wordt? Want dan is de kans vrij groot dat de browser een GET request doet naar de nieuwe locatie, en dan is $_POST idd laag.
Het is overigens zo dat in de index.php van CodeIgniter de POST variabele nog wel doorkomt. En in mijn functie levert zelfs het gebruik van $this->input->post('var') niets op...
Waarschijnlijk kom ik er uiteindelijk wel uit maar ik hoop dat iemand een concrete tip heeft, waardoor ik een stuk sneller weet waar te zoeken.
Toevoeging op 06/02/2011 15:53:36:
Ok, ik ben er uit. Aangezien ik CodeIgniter 2.0 gebruik, waar CSRF beveiliging is ingebouwd gaat het mis op dit punt. Dit gebeurt in de _sanitize_globals() van de Input class. Als oplossing zet ik de CSRF validatie uit in de controller die mijn AJAX requests afhandelt. Tenzij iemand een beter idee heeft?
Toevoeging op 06/02/2011 17:06:16:
Ik heb nog eens even nagedacht en een betere oplossing bedacht... aangezien via mijn Ajax requests vaak userdata worden meegezonden, is het uitzetten van de CSRF validatie totaal onwenselijk. Ik heb dus in het dataobject dat als parameter wordt meegegeven aan jQuery.post het volgende toegevoegd:
Code (php)
1
2
3
2
3
<?
data['{$this->CI->security->csrf_token_name}'] = '{$this->CI->security->csrf_hash}';
?>
data['{$this->CI->security->csrf_token_name}'] = '{$this->CI->security->csrf_hash}';
?>
Op die manier wordt de waarde van de csrf token netjes meegestuurd als POST variabele en aangezien de csrf cookie automatisch door jQuery wordt meegestuurd ontstaat zo een volledig werkende csrf controle :)
In ieder geval bedankt voor de hulp!