wildlife

‘undefined’ nach form submit mit Code Igniter und jQuery mobile

von Torsten Feld // December 29th, 2012 // IT, PHP / Javascript, Tutorials //

Aktuell arbeite ich an einem neuen Webprojekt, bei welchem ich zum ersten Mal mit dem PHP Framework Code Igniter und jQuery Mobile arbeite. Nach einigen Anlaufschwierigkeiten, komme ich nun recht gut voran, wobei ich nur jedem empfehlen kann, nicht mit zwei unbekannten Sprachen / Frameworks zu starten. Ein Problem hat mir jedoch heute den letzten Nerv geraubt. Um es selbst demnächst nochmal nachschlagen zu können und auch andere von meinen Fehler profitieren zu lassen, hier das Problem und die entsprechende Lösung:

In meinem Controller habe ich eine Methode signup, welche bei dem ersten Aufruf lediglich die view des Registrierungsformulars lädt und anzeigt. Im header view werden lediglich die jQuery Mobile js Sources geladen, der meta viewport und das Charset für die Seite bestimmt. Zu Beginn habe ich, wie von Code Igniter gewohnt, das Formular über <?php echo form_open('user/signup'); ?> geöffnet und dann mittels jQuery Mobile das Formular erstellt. Mein Problem war nun, dass nach dem Absenden des Formulars, der Übergabe der Post-Werte an die signup Methode des Controllers und der Formular-Validierung, ich lediglich ein 'undefined' angezeigt bekommen habe. Die Suche nach der Ursache hat mich fast den halben Nachmittag gekostet. Nach einiger Recherche über Google und viele 'nicht-weiterhelfende' Forenbeiträge später, stieß ich zufällig auf ein Problem in Verbindung mit Ajax.

Hier fiel mir dann auf, dass man bei jQuery Mobile Formularen explizit angeben muss, wenn ein Formular _nicht_ über Ajax gesendet werden soll; und hier war der Fehler. Über data-ajax="false" im Form-Tag kann dieses Verhalten deaktiviert werden. Bei Code Igniter kann dies über den zweiten Parameter der form_open() Funktion als Array mitgegeben werden werden, so dass das dann wie folgt aussieht: <?php echo form_open('user/signup', array('data-ajax' => 'false')); ?>. Die entsprechenden Ausschnitte aus Controller, Model und View findet Ihr im folgenden Gist:

View the code on Gist.

Series Navigation

<< Anzeigen von Post-Parametern über Javascript vor dem Absenden des Formulars über SubmitEigene Subdomain für SSL Verschlüsselung mit Codeigniter >>


Leave a Reply