<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.stephanschlegel.de/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=94.216.225.184</id>
	<title>Wikizone - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.stephanschlegel.de/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=94.216.225.184"/>
	<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Spezial:Beitr%C3%A4ge/94.216.225.184"/>
	<updated>2026-05-06T17:58:14Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.35.14</generator>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=AJAX_in_TYPO3_Extensions&amp;diff=19063</id>
		<title>AJAX in TYPO3 Extensions</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=AJAX_in_TYPO3_Extensions&amp;diff=19063"/>
		<updated>2012-03-20T12:00:20Z</updated>

		<summary type="html">&lt;p&gt;94.216.225.184: /* Weitere Beispiele */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Übersicht ==&lt;br /&gt;
=== Links ===&lt;br /&gt;
http://prototypejs.org/learn/introduction-to-ajax&lt;br /&gt;
&lt;br /&gt;
http://www.interaktionsdesigner.de/2009/01/04/asynchrone-datenubertragung-zwischen-typo3-und-jquery/&lt;br /&gt;
&lt;br /&gt;
=== Typo3 Skripte ohne Rendering ===&lt;br /&gt;
Ein Ajax Request wird in den meisten Fällen über ein JavaScript abgesetzt von einem Serverskript (PHP) verarbeitet und die Antwort als xml oder JSON Objekt zurückgegeben. &lt;br /&gt;
&lt;br /&gt;
Um das PHP-Skript zu nutzen und zugleich die ganzen &amp;#039;&amp;#039;&amp;#039;Rendering und Caching-Mechanismen von Typo3 zu vermeiden&amp;#039;&amp;#039;&amp;#039; könnte man irgend ein php Skript nutzen. Andererseits wollen wir die Typo3 Funktionalitäten wie dbal Datenbankabfrage etc. nutzen. Deshalb stellt Typo3 den &amp;#039;&amp;#039;&amp;#039;eid Mechanismus&amp;#039;&amp;#039;&amp;#039; zur Verfügung (siehe unten). Mit diesem wird das &amp;#039;&amp;#039;&amp;#039;Seitenrendering frühzeitig abgebrochen&amp;#039;&amp;#039;&amp;#039; und der Request direkt an ein Skript weitergegeben.&lt;br /&gt;
&lt;br /&gt;
Eine weitere Möglichkeit außer dem eid Mechanismus findest du unter [[Typo3 - alternatives Rendering]]&lt;br /&gt;
&lt;br /&gt;
=== Schnelle Antwort ===&lt;br /&gt;
Dieses Skript kann sich nun ausschließlich um die Anfrage kümmern und das Ergebnis direkt zurückgeben, welches wiederum die Daten in die Seite einhängt.&lt;br /&gt;
&lt;br /&gt;
== Der eid Mechanismus und AJAX ==&lt;br /&gt;
Quellen: http://www.typo3-tutorials.org/tutorials/extensions/eid-mechanismus.html (10.3.2010 Artikel von 2007)&lt;br /&gt;
&lt;br /&gt;
http://www.blogix.net/2009/02/08/typo3-eid-oder-daten-mit-ajax-anfordern/&lt;br /&gt;
&lt;br /&gt;
eID steht für Extension ID&lt;br /&gt;
Der eID Mechanismus ist der seit der Version 4.x dabei und kann als &amp;#039;&amp;#039;&amp;#039;alternative Rendering Engine&amp;#039;&amp;#039;&amp;#039; betrachtet werden.&lt;br /&gt;
&lt;br /&gt;
Angesprochen wird er über einen GET oder POST Parameter. Sobald &amp;#039;&amp;#039;&amp;#039;eID als Parameter in der URL&amp;#039;&amp;#039;&amp;#039; vorhanden ist (zB. &amp;#039;&amp;#039;www.domain.de/?eID=schuesselwort&amp;#039;&amp;#039;) wird der normaler Rendering Prozess sehr früh abgebrochen und auf ein Script weitergeleitet was wir selber programmieren müssen. Da der normale Rendering Prozess so früh abgebrochen wird kommt es auch noch zu keiner Ausgabe. Es wird nichts gecachet und kein HeaderCode ect generiert. Der eID Mechanismus kann also super im Zusammenhang mit AJAX verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Wollen wir uns einmal die index_ts.php (typo3/sysext/cms/tslib/) Zeile 127 bis 136 ansehen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// *********************&lt;br /&gt;
// Look for extension ID which will launch alternative output engine&lt;br /&gt;
// *********************&lt;br /&gt;
if ($temp_extId = t3lib_div::_GP(&amp;#039;eID&amp;#039;))    {&lt;br /&gt;
    if ($classPath = t3lib_div::getFileAbsFileName($TYPO3_CONF_VARS[&amp;#039;FE&amp;#039;][&amp;#039;eID_include&amp;#039;][$temp_extId]))    {&lt;br /&gt;
        require_once(PATH_tslib.&amp;#039;class.tslib_eidtools.php&amp;#039;);&lt;br /&gt;
        require($classPath);&lt;br /&gt;
    }&lt;br /&gt;
    exit;&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier wird überprüft ob der Schlüssel eID als Get/Post Variable vorhanden ist und falls ja, wird der normale Renderingprozess abgebrochen und auf unser Script verwiesen. Doch woher weiss TYPO3 jetzt wo unser Script liegt ?&lt;br /&gt;
&lt;br /&gt;
Das sagen wir Ihm über $TYPO3_CONF_VARS[&amp;#039;FE&amp;#039;][&amp;#039;eID_include&amp;#039;][$temp_extId].&lt;br /&gt;
Wir müssten entweder in die localconf.php oder in eine ext_localconf.php einer Extension folgendes Eintragen&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php &lt;br /&gt;
// Zugriff nur von Typo3 aus:&lt;br /&gt;
if (!defined (&amp;#039;TYPO3_MODE&amp;#039;)) {&lt;br /&gt;
 	die (&amp;#039;Access denied.&amp;#039;);&lt;br /&gt;
}&lt;br /&gt;
// Registrierung der eid Scripts&lt;br /&gt;
$TYPO3_CONF_VARS[&amp;#039;FE&amp;#039;][&amp;#039;eID_include&amp;#039;][&amp;#039;schluesselwort&amp;#039;] = &amp;#039;EXT:myExtKey/eid/meinScript.php&amp;#039;; ?&amp;gt;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Steht jetzt also in der Adresse &amp;#039;&amp;#039;www.domain.de/?eID=schluesselwort&amp;#039;&amp;#039; geht er in die erste if Abfrage und sieht das &amp;#039;&amp;#039;$TYPO3_CONF_VARS[&amp;#039;FE&amp;#039;][&amp;#039;eID_include&amp;#039;][$temp_extId]&amp;#039;&amp;#039; vorhanden ist und &amp;#039;&amp;#039;&amp;#039;speichert&amp;#039;&amp;#039;&amp;#039; &amp;#039;EXT:myExtKey/meinScript.php&amp;#039; in die Variable &amp;#039;&amp;#039;$classPat&amp;#039;&amp;#039;h. &amp;#039;&amp;#039;&amp;#039;Danach includiert er die Klasse eidtools und unsere eigene&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Da unser Script noch leer ist bekommen wir eine weisse Seite angezeigt in der auch der komplette Quelltext leer ist.&lt;br /&gt;
&lt;br /&gt;
Um in unserem Script nun ein FEUSER Objekt zu haben und eine aktive DB Verbindung schreiben wir&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php &lt;br /&gt;
$feUserObj = tslib_eidtools::initFeUser(); // Initialize FE user object&lt;br /&gt;
tslib_eidtools::connectDB(); //Connect to database &lt;br /&gt;
// ...&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Die erste Zeile &amp;#039;&amp;#039;&amp;#039;initialisert den FrontentUser&amp;#039;&amp;#039;&amp;#039; und gibt uns diesen als Objekt zurück.&lt;br /&gt;
&lt;br /&gt;
Die zweite Zeile stellt eine &amp;#039;&amp;#039;&amp;#039;Verbindung zur Datenbank&amp;#039;&amp;#039;&amp;#039; her.&lt;br /&gt;
&lt;br /&gt;
Im Weiteren können wir ganz normal auch TYPO3 Funktionalitäten benutzen und unseren eigenen Renderingablauf schreiben.&lt;br /&gt;
&lt;br /&gt;
Um auch &amp;#039;&amp;#039;&amp;#039;zB auf alle piBase Funktionen zurückzugreifen&amp;#039;&amp;#039;&amp;#039; können wir uns ganz einfach eine Klasse erstellen die von dieser Erbt&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
require_once(PATH_tslib.&amp;#039;class.tslib_pibase.php&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
class unsereKlasse extends tslib_pibase {&lt;br /&gt;
  function main(){&lt;br /&gt;
    $feUserObj = tslib_eidtools::initFeUser(); // Initialize FE user object        &lt;br /&gt;
    tslib_eidtools::connectDB(); //Connect to database&lt;br /&gt;
    echo(&amp;quot;hallo welt&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$output = t3lib_div::makeInstance(&amp;#039;unsereKlasse&amp;#039;);&lt;br /&gt;
$output-&amp;gt;main();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/php&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Das war es soweit, wenn Ihr noch fragen dazu habt stellt Sie einfach über die Kommentarfunktion.&lt;br /&gt;
&lt;br /&gt;
== eid ajax mit jQuery Beispiel ==&lt;br /&gt;
Quelle: s.o.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== eid ajax mit Prototype Beispiel ==&lt;br /&gt;
Bei diesem Beispiel gehen wir von einem normalen Frontend Plugin aus das z.B. mit dem Kickstarter erzeugt wird. Wir legen eine PHP-Klasse für die Bearbeitung der AJAX Anfrage an und eine JavaScript Datei mit den passenden Funktionen. Die PHP Datei wird in localconf registriert. Das Handling des AJAX Request überlassen wir der Prototype JavaScript Lib die in Typo3 schon dabei ist.&lt;br /&gt;
&lt;br /&gt;
Diese Dateien bearbeiten wir:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typo3conf/ext/myExtKey/&lt;br /&gt;
 - ext_localconf.php&lt;br /&gt;
typo3conf/ext/myExtKey/eid/&lt;br /&gt;
 - ajax.js&lt;br /&gt;
 - class.myExtKey_eid.php&lt;br /&gt;
typo3conf/ext/myExtKey/pi1/&lt;br /&gt;
 - class.myExtKey_pi1.php&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== eID Datei ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;class.myExtkey_eid.php&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if (!defined (&amp;#039;PATH_typo3conf&amp;#039;)) die (&amp;#039;Access denied: eID only.&amp;#039;);&lt;br /&gt;
require_once(PATH_tslib . &amp;#039;class.tslib_pibase.php&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
class tx_myExtKey_eid extends tslib_pibase {&lt;br /&gt;
	var $prefixId      = &amp;#039;tx_myExtKey_eid&amp;#039;;// Same as class name&lt;br /&gt;
	var $scriptRelPath = &amp;#039;eid/class.tx_myExtKey_eid.php&amp;#039;;	// Path to this script relative to the extension dir.&lt;br /&gt;
	var $extKey        = &amp;#039;myExtKey&amp;#039;;// The extension key.&lt;br /&gt;
&lt;br /&gt;
	function eid_main() {&lt;br /&gt;
		$GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;fe_user = tslib_eidtools::initFeUser();&lt;br /&gt;
		tslib_eidtools::connectDB();&lt;br /&gt;
&lt;br /&gt;
		// Hier beginnt unser Code&lt;br /&gt;
		$res = &amp;#039;Hallo Welt&amp;#039;;&lt;br /&gt;
		// Hier endet unser Code&lt;br /&gt;
&lt;br /&gt;
		// Wir geben der Anfrage ein XML Objekt zurück&lt;br /&gt;
		$ajax_return_data = t3lib_div::array2xml(array(&amp;#039;data&amp;#039;=&amp;gt;$res));&lt;br /&gt;
		header(&amp;#039;Expires: Mon, 26 Jul 2000 03:00:00 GMT&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Last-Modified: &amp;#039; . gmdate( &amp;quot;D, d M Y H:i:s&amp;quot; ) . &amp;#039;GMT&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Cache-Control: no-cache, must-revalidate&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Pragma: no-cache&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Content-Length: &amp;#039;.strlen($ajax_return_data));&lt;br /&gt;
		header(&amp;#039;Content-Type: text/xml&amp;#039;);&lt;br /&gt;
		echo $ajax_return_data;&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
$extensionkey = t3lib_div::makeInstance(&amp;#039;tx_myExtKey_eid&amp;#039;);&lt;br /&gt;
$extensionkey-&amp;gt;eid_main();&lt;br /&gt;
&lt;br /&gt;
?&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Möchte man in diesem Skript nun auf &amp;#039;&amp;#039;&amp;#039;Funktionen (z.B. Datenbank) aus dem TYPO3-Framework&amp;#039;&amp;#039;&amp;#039; zurückgreifen, so muss man für die Instantiierung selbst sorge tragen. In der Datei &amp;#039;&amp;#039;typo3_src/typo3/sysext/cms/tslib/class.tslib_eidtools.php&amp;#039;&amp;#039; findet man vorgefertigte Methoden um auf die Daten eines FE-Users oder die Datenbank zugreifen zu können (Verwendung siehe im Code oben).&lt;br /&gt;
&lt;br /&gt;
=== ext_localconf.php ===&lt;br /&gt;
Die &amp;#039;&amp;#039;&amp;#039;Datei muß noch dem System bekannt gemacht werden&amp;#039;&amp;#039;&amp;#039;. Dies tun wir in der &amp;#039;&amp;#039;&amp;#039;ext_localconf.php&amp;#039;&amp;#039;&amp;#039; indem wir folgende Zeile hinzufügen:&lt;br /&gt;
&lt;br /&gt;
 $TYPO3_CONF_VARS[&amp;#039;FE&amp;#039;][&amp;#039;eID_include&amp;#039;][&amp;#039;myExtKeyeid&amp;#039;] = &amp;#039;EXT:myExtKey/eid/class.myExtKey_eid.php&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
Hiermit sagen wir dem System das wir gerne die Datei myExtKey_eid.php ausführen würden wenn der Parameter eID=myExtKeyeid übergeben wird.&lt;br /&gt;
&lt;br /&gt;
=== Das Frontend Plugin ===&lt;br /&gt;
In unserem Frontent Plugin erzeugen wir einen div container mit der id ac (ajaxcontainer) diesen wollen wir später mit der Ausgabe des Ajax Scriptes füllen. Außerdem noch einen Knopf mit dem wir die Anfrage starten können.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;class.myExtKey_pi1.php&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
$content .= &amp;#039;&lt;br /&gt;
&amp;lt;div id=&amp;quot;ac&amp;quot;&amp;gt;ajaxcontainer&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;input onclick=&amp;quot;getData()&amp;quot; id=&amp;quot;myButton&amp;quot; type=&amp;quot;button&amp;quot; value=&amp;quot;AJAX&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;#039;;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anmerkung: Statt dem onclick im Button, kann man auch Prototypes observe Funktion nehmen, dan kann man den Code komplett in der .js Datei verwalten.&lt;br /&gt;
&lt;br /&gt;
=== JavaScript ===&lt;br /&gt;
Jetzt benötigen wir noch etwas JavaScript um die &amp;#039;&amp;#039;&amp;#039;Anfrage vom FrontendPlugi&amp;#039;&amp;#039;&amp;#039;n auszuführen:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;JavaScript (ajax.js)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
function anfrage()&lt;br /&gt;
{&lt;br /&gt;
	var myAjax = new Ajax.Request(&lt;br /&gt;
	&amp;#039;index.php&amp;#039;, // the Request goes to index.php&lt;br /&gt;
	{&lt;br /&gt;
		method: &amp;#039;get&amp;#039;, //get or post&lt;br /&gt;
		parameters: &amp;#039;eID=gbeventseid&amp;#039;,&lt;br /&gt;
		onComplete: show // after loading use the anzeige function&lt;br /&gt;
	});&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function show(orgRequest)&lt;br /&gt;
//&lt;br /&gt;
{&lt;br /&gt;
	var xmldoc = orgRequest.responseXML; //use XML Object as answer&lt;br /&gt;
	var result = xmldoc.getElementsByTagName(&amp;quot;data&amp;quot;)[0].firstChild.data;//datapart&lt;br /&gt;
	$(&amp;#039;ac&amp;#039;).innerHTML = result;//drop the stuff in the div with id &amp;quot;ac&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eine Prise TypoScript ===&lt;br /&gt;
Wir benutzen wie gesagt das Prototype Lib. Unsere &amp;#039;&amp;#039;&amp;#039;JavaScript Dateien&amp;#039;&amp;#039;&amp;#039; müssen wir natürlich auch in das Frontend Plugin &amp;#039;&amp;#039;&amp;#039;einbinden&amp;#039;&amp;#039;&amp;#039;. Das machen wir z.B. ganz einfach über TypoScript&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;TypoScript&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
page.includeJS.proto = typo3/contrib/prototype/prototype.js&lt;br /&gt;
page.includeJS.gbevents3 = EXT:gb_events/eid/ajax.js&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Weitere Beispiele ==&lt;br /&gt;
Angewendet in der kleinen Extension gbflashauth. Über einen Flash Movie wird die url aufgerufen und zurückgegeben ob der User eingeloggt ist und mit welchem Namen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if (!defined (&amp;#039;PATH_typo3conf&amp;#039;)) die (&amp;#039;Access denied: eID only.&amp;#039;);&lt;br /&gt;
require_once(PATH_tslib . &amp;#039;class.tslib_pibase.php&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
class tx_gbflashauth_eid extends tslib_pibase {&lt;br /&gt;
	var $prefixId      = &amp;#039;tx_gbflashauth_eid&amp;#039;;// Same as class name&lt;br /&gt;
	var $scriptRelPath = &amp;#039;eid/class.tx_gbflashauth_eid.php&amp;#039;;	// Path to this script relative to the extension dir.&lt;br /&gt;
	var $extKey        = &amp;#039;gbflashauth&amp;#039;;// The extension key.&lt;br /&gt;
&lt;br /&gt;
	function eid_main() {&lt;br /&gt;
		$GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;fe_user = tslib_eidtools::initFeUser();&lt;br /&gt;
		tslib_eidtools::connectDB();&lt;br /&gt;
&lt;br /&gt;
		// Hier beginnt unser Code&lt;br /&gt;
		&lt;br /&gt;
		if(!empty($GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;fe_user-&amp;gt;user)){&lt;br /&gt;
			$uid = $GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;fe_user-&amp;gt;user[uid];&lt;br /&gt;
			$name = $GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;fe_user-&amp;gt;user[name];&lt;br /&gt;
			$firstname = $GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;fe_user-&amp;gt;user[first_name];&lt;br /&gt;
			$lastname = $GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;fe_user-&amp;gt;user[last_name];&lt;br /&gt;
			$email= $GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;fe_user-&amp;gt;user[email];&lt;br /&gt;
			$res=&amp;quot;login=1&amp;quot;.&amp;quot;&amp;amp;uid=&amp;quot;.$uid.&amp;quot;&amp;amp;firstname=&amp;quot;.$firstname.&amp;quot;&amp;amp;lastname=&amp;quot;.$lastname;		&lt;br /&gt;
		}else{&lt;br /&gt;
			$res = &amp;#039;login=0&amp;#039;;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		//header(&amp;#039;Expires: Mon, 26 Jul 2000 03:00:00 GMT&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Last-Modified: &amp;#039; . gmdate( &amp;quot;D, d M Y H:i:s&amp;quot; ) . &amp;#039;GMT&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Cache-Control: no-cache, must-revalidate&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Pragma: no-cache&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Content-Length: &amp;#039;.strlen($res));&lt;br /&gt;
		//header(&amp;#039;Content-Type: text/plain&amp;#039;);&lt;br /&gt;
		//echo $ajax_return_data;&lt;br /&gt;
		echo $res;&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
$extensionkey = t3lib_div::makeInstance(&amp;#039;tx_gbflashauth_eid&amp;#039;);&lt;br /&gt;
$extensionkey-&amp;gt;eid_main();&lt;br /&gt;
&lt;br /&gt;
?&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Probleme mit cc_debug und JASON Objekten ==&lt;br /&gt;
&lt;br /&gt;
von Tim Lochmüller im Adventskalender 2008&lt;br /&gt;
&lt;br /&gt;
In letzter Zeit habe ich sehr oft mit AJAX und JSON gearbeitet. Leider gibt es dabei immer ein Problem mit cc_debug, weil sich dieser immer hinter die Ausgabe des JSON Codes klemmt und damit ein kaputtes JSON erzeugt. Nachdem ich heute mit meinem Kollegen Michael zusammen gesessen habe um dieses Problem zu lösen, sind wir auf eine sehr einfache Lösung gestoßen:&lt;br /&gt;
&lt;br /&gt;
 $GLOBALS[&amp;#039;errorList&amp;#039;]-&amp;gt;clear();&lt;br /&gt;
 die(json_encode($result));&lt;br /&gt;
&lt;br /&gt;
Die Zeile 1 direkt vor der Ausgabe des JSON Codes eingebaut, verhindert, dass cc_debug noch seinen JavaScript-Code hinter her ausgibt. Und wer jetzt sagt: naje, ein die() oder exit() sollte es auch tun, der irrt sich. Versucht es gerne selber mal&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>94.216.225.184</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=AJAX_in_TYPO3_Extensions&amp;diff=19062</id>
		<title>AJAX in TYPO3 Extensions</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=AJAX_in_TYPO3_Extensions&amp;diff=19062"/>
		<updated>2012-03-20T11:58:16Z</updated>

		<summary type="html">&lt;p&gt;94.216.225.184: /* Weitere Beispiele */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Übersicht ==&lt;br /&gt;
=== Links ===&lt;br /&gt;
http://prototypejs.org/learn/introduction-to-ajax&lt;br /&gt;
&lt;br /&gt;
http://www.interaktionsdesigner.de/2009/01/04/asynchrone-datenubertragung-zwischen-typo3-und-jquery/&lt;br /&gt;
&lt;br /&gt;
=== Typo3 Skripte ohne Rendering ===&lt;br /&gt;
Ein Ajax Request wird in den meisten Fällen über ein JavaScript abgesetzt von einem Serverskript (PHP) verarbeitet und die Antwort als xml oder JSON Objekt zurückgegeben. &lt;br /&gt;
&lt;br /&gt;
Um das PHP-Skript zu nutzen und zugleich die ganzen &amp;#039;&amp;#039;&amp;#039;Rendering und Caching-Mechanismen von Typo3 zu vermeiden&amp;#039;&amp;#039;&amp;#039; könnte man irgend ein php Skript nutzen. Andererseits wollen wir die Typo3 Funktionalitäten wie dbal Datenbankabfrage etc. nutzen. Deshalb stellt Typo3 den &amp;#039;&amp;#039;&amp;#039;eid Mechanismus&amp;#039;&amp;#039;&amp;#039; zur Verfügung (siehe unten). Mit diesem wird das &amp;#039;&amp;#039;&amp;#039;Seitenrendering frühzeitig abgebrochen&amp;#039;&amp;#039;&amp;#039; und der Request direkt an ein Skript weitergegeben.&lt;br /&gt;
&lt;br /&gt;
Eine weitere Möglichkeit außer dem eid Mechanismus findest du unter [[Typo3 - alternatives Rendering]]&lt;br /&gt;
&lt;br /&gt;
=== Schnelle Antwort ===&lt;br /&gt;
Dieses Skript kann sich nun ausschließlich um die Anfrage kümmern und das Ergebnis direkt zurückgeben, welches wiederum die Daten in die Seite einhängt.&lt;br /&gt;
&lt;br /&gt;
== Der eid Mechanismus und AJAX ==&lt;br /&gt;
Quellen: http://www.typo3-tutorials.org/tutorials/extensions/eid-mechanismus.html (10.3.2010 Artikel von 2007)&lt;br /&gt;
&lt;br /&gt;
http://www.blogix.net/2009/02/08/typo3-eid-oder-daten-mit-ajax-anfordern/&lt;br /&gt;
&lt;br /&gt;
eID steht für Extension ID&lt;br /&gt;
Der eID Mechanismus ist der seit der Version 4.x dabei und kann als &amp;#039;&amp;#039;&amp;#039;alternative Rendering Engine&amp;#039;&amp;#039;&amp;#039; betrachtet werden.&lt;br /&gt;
&lt;br /&gt;
Angesprochen wird er über einen GET oder POST Parameter. Sobald &amp;#039;&amp;#039;&amp;#039;eID als Parameter in der URL&amp;#039;&amp;#039;&amp;#039; vorhanden ist (zB. &amp;#039;&amp;#039;www.domain.de/?eID=schuesselwort&amp;#039;&amp;#039;) wird der normaler Rendering Prozess sehr früh abgebrochen und auf ein Script weitergeleitet was wir selber programmieren müssen. Da der normale Rendering Prozess so früh abgebrochen wird kommt es auch noch zu keiner Ausgabe. Es wird nichts gecachet und kein HeaderCode ect generiert. Der eID Mechanismus kann also super im Zusammenhang mit AJAX verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Wollen wir uns einmal die index_ts.php (typo3/sysext/cms/tslib/) Zeile 127 bis 136 ansehen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// *********************&lt;br /&gt;
// Look for extension ID which will launch alternative output engine&lt;br /&gt;
// *********************&lt;br /&gt;
if ($temp_extId = t3lib_div::_GP(&amp;#039;eID&amp;#039;))    {&lt;br /&gt;
    if ($classPath = t3lib_div::getFileAbsFileName($TYPO3_CONF_VARS[&amp;#039;FE&amp;#039;][&amp;#039;eID_include&amp;#039;][$temp_extId]))    {&lt;br /&gt;
        require_once(PATH_tslib.&amp;#039;class.tslib_eidtools.php&amp;#039;);&lt;br /&gt;
        require($classPath);&lt;br /&gt;
    }&lt;br /&gt;
    exit;&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier wird überprüft ob der Schlüssel eID als Get/Post Variable vorhanden ist und falls ja, wird der normale Renderingprozess abgebrochen und auf unser Script verwiesen. Doch woher weiss TYPO3 jetzt wo unser Script liegt ?&lt;br /&gt;
&lt;br /&gt;
Das sagen wir Ihm über $TYPO3_CONF_VARS[&amp;#039;FE&amp;#039;][&amp;#039;eID_include&amp;#039;][$temp_extId].&lt;br /&gt;
Wir müssten entweder in die localconf.php oder in eine ext_localconf.php einer Extension folgendes Eintragen&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php &lt;br /&gt;
// Zugriff nur von Typo3 aus:&lt;br /&gt;
if (!defined (&amp;#039;TYPO3_MODE&amp;#039;)) {&lt;br /&gt;
 	die (&amp;#039;Access denied.&amp;#039;);&lt;br /&gt;
}&lt;br /&gt;
// Registrierung der eid Scripts&lt;br /&gt;
$TYPO3_CONF_VARS[&amp;#039;FE&amp;#039;][&amp;#039;eID_include&amp;#039;][&amp;#039;schluesselwort&amp;#039;] = &amp;#039;EXT:myExtKey/eid/meinScript.php&amp;#039;; ?&amp;gt;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Steht jetzt also in der Adresse &amp;#039;&amp;#039;www.domain.de/?eID=schluesselwort&amp;#039;&amp;#039; geht er in die erste if Abfrage und sieht das &amp;#039;&amp;#039;$TYPO3_CONF_VARS[&amp;#039;FE&amp;#039;][&amp;#039;eID_include&amp;#039;][$temp_extId]&amp;#039;&amp;#039; vorhanden ist und &amp;#039;&amp;#039;&amp;#039;speichert&amp;#039;&amp;#039;&amp;#039; &amp;#039;EXT:myExtKey/meinScript.php&amp;#039; in die Variable &amp;#039;&amp;#039;$classPat&amp;#039;&amp;#039;h. &amp;#039;&amp;#039;&amp;#039;Danach includiert er die Klasse eidtools und unsere eigene&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Da unser Script noch leer ist bekommen wir eine weisse Seite angezeigt in der auch der komplette Quelltext leer ist.&lt;br /&gt;
&lt;br /&gt;
Um in unserem Script nun ein FEUSER Objekt zu haben und eine aktive DB Verbindung schreiben wir&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php &lt;br /&gt;
$feUserObj = tslib_eidtools::initFeUser(); // Initialize FE user object&lt;br /&gt;
tslib_eidtools::connectDB(); //Connect to database &lt;br /&gt;
// ...&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Die erste Zeile &amp;#039;&amp;#039;&amp;#039;initialisert den FrontentUser&amp;#039;&amp;#039;&amp;#039; und gibt uns diesen als Objekt zurück.&lt;br /&gt;
&lt;br /&gt;
Die zweite Zeile stellt eine &amp;#039;&amp;#039;&amp;#039;Verbindung zur Datenbank&amp;#039;&amp;#039;&amp;#039; her.&lt;br /&gt;
&lt;br /&gt;
Im Weiteren können wir ganz normal auch TYPO3 Funktionalitäten benutzen und unseren eigenen Renderingablauf schreiben.&lt;br /&gt;
&lt;br /&gt;
Um auch &amp;#039;&amp;#039;&amp;#039;zB auf alle piBase Funktionen zurückzugreifen&amp;#039;&amp;#039;&amp;#039; können wir uns ganz einfach eine Klasse erstellen die von dieser Erbt&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
require_once(PATH_tslib.&amp;#039;class.tslib_pibase.php&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
class unsereKlasse extends tslib_pibase {&lt;br /&gt;
  function main(){&lt;br /&gt;
    $feUserObj = tslib_eidtools::initFeUser(); // Initialize FE user object        &lt;br /&gt;
    tslib_eidtools::connectDB(); //Connect to database&lt;br /&gt;
    echo(&amp;quot;hallo welt&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$output = t3lib_div::makeInstance(&amp;#039;unsereKlasse&amp;#039;);&lt;br /&gt;
$output-&amp;gt;main();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/php&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Das war es soweit, wenn Ihr noch fragen dazu habt stellt Sie einfach über die Kommentarfunktion.&lt;br /&gt;
&lt;br /&gt;
== eid ajax mit jQuery Beispiel ==&lt;br /&gt;
Quelle: s.o.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== eid ajax mit Prototype Beispiel ==&lt;br /&gt;
Bei diesem Beispiel gehen wir von einem normalen Frontend Plugin aus das z.B. mit dem Kickstarter erzeugt wird. Wir legen eine PHP-Klasse für die Bearbeitung der AJAX Anfrage an und eine JavaScript Datei mit den passenden Funktionen. Die PHP Datei wird in localconf registriert. Das Handling des AJAX Request überlassen wir der Prototype JavaScript Lib die in Typo3 schon dabei ist.&lt;br /&gt;
&lt;br /&gt;
Diese Dateien bearbeiten wir:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typo3conf/ext/myExtKey/&lt;br /&gt;
 - ext_localconf.php&lt;br /&gt;
typo3conf/ext/myExtKey/eid/&lt;br /&gt;
 - ajax.js&lt;br /&gt;
 - class.myExtKey_eid.php&lt;br /&gt;
typo3conf/ext/myExtKey/pi1/&lt;br /&gt;
 - class.myExtKey_pi1.php&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== eID Datei ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;class.myExtkey_eid.php&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if (!defined (&amp;#039;PATH_typo3conf&amp;#039;)) die (&amp;#039;Access denied: eID only.&amp;#039;);&lt;br /&gt;
require_once(PATH_tslib . &amp;#039;class.tslib_pibase.php&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
class tx_myExtKey_eid extends tslib_pibase {&lt;br /&gt;
	var $prefixId      = &amp;#039;tx_myExtKey_eid&amp;#039;;// Same as class name&lt;br /&gt;
	var $scriptRelPath = &amp;#039;eid/class.tx_myExtKey_eid.php&amp;#039;;	// Path to this script relative to the extension dir.&lt;br /&gt;
	var $extKey        = &amp;#039;myExtKey&amp;#039;;// The extension key.&lt;br /&gt;
&lt;br /&gt;
	function eid_main() {&lt;br /&gt;
		$GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;fe_user = tslib_eidtools::initFeUser();&lt;br /&gt;
		tslib_eidtools::connectDB();&lt;br /&gt;
&lt;br /&gt;
		// Hier beginnt unser Code&lt;br /&gt;
		$res = &amp;#039;Hallo Welt&amp;#039;;&lt;br /&gt;
		// Hier endet unser Code&lt;br /&gt;
&lt;br /&gt;
		// Wir geben der Anfrage ein XML Objekt zurück&lt;br /&gt;
		$ajax_return_data = t3lib_div::array2xml(array(&amp;#039;data&amp;#039;=&amp;gt;$res));&lt;br /&gt;
		header(&amp;#039;Expires: Mon, 26 Jul 2000 03:00:00 GMT&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Last-Modified: &amp;#039; . gmdate( &amp;quot;D, d M Y H:i:s&amp;quot; ) . &amp;#039;GMT&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Cache-Control: no-cache, must-revalidate&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Pragma: no-cache&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Content-Length: &amp;#039;.strlen($ajax_return_data));&lt;br /&gt;
		header(&amp;#039;Content-Type: text/xml&amp;#039;);&lt;br /&gt;
		echo $ajax_return_data;&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
$extensionkey = t3lib_div::makeInstance(&amp;#039;tx_myExtKey_eid&amp;#039;);&lt;br /&gt;
$extensionkey-&amp;gt;eid_main();&lt;br /&gt;
&lt;br /&gt;
?&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Möchte man in diesem Skript nun auf &amp;#039;&amp;#039;&amp;#039;Funktionen (z.B. Datenbank) aus dem TYPO3-Framework&amp;#039;&amp;#039;&amp;#039; zurückgreifen, so muss man für die Instantiierung selbst sorge tragen. In der Datei &amp;#039;&amp;#039;typo3_src/typo3/sysext/cms/tslib/class.tslib_eidtools.php&amp;#039;&amp;#039; findet man vorgefertigte Methoden um auf die Daten eines FE-Users oder die Datenbank zugreifen zu können (Verwendung siehe im Code oben).&lt;br /&gt;
&lt;br /&gt;
=== ext_localconf.php ===&lt;br /&gt;
Die &amp;#039;&amp;#039;&amp;#039;Datei muß noch dem System bekannt gemacht werden&amp;#039;&amp;#039;&amp;#039;. Dies tun wir in der &amp;#039;&amp;#039;&amp;#039;ext_localconf.php&amp;#039;&amp;#039;&amp;#039; indem wir folgende Zeile hinzufügen:&lt;br /&gt;
&lt;br /&gt;
 $TYPO3_CONF_VARS[&amp;#039;FE&amp;#039;][&amp;#039;eID_include&amp;#039;][&amp;#039;myExtKeyeid&amp;#039;] = &amp;#039;EXT:myExtKey/eid/class.myExtKey_eid.php&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
Hiermit sagen wir dem System das wir gerne die Datei myExtKey_eid.php ausführen würden wenn der Parameter eID=myExtKeyeid übergeben wird.&lt;br /&gt;
&lt;br /&gt;
=== Das Frontend Plugin ===&lt;br /&gt;
In unserem Frontent Plugin erzeugen wir einen div container mit der id ac (ajaxcontainer) diesen wollen wir später mit der Ausgabe des Ajax Scriptes füllen. Außerdem noch einen Knopf mit dem wir die Anfrage starten können.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;class.myExtKey_pi1.php&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
$content .= &amp;#039;&lt;br /&gt;
&amp;lt;div id=&amp;quot;ac&amp;quot;&amp;gt;ajaxcontainer&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;input onclick=&amp;quot;getData()&amp;quot; id=&amp;quot;myButton&amp;quot; type=&amp;quot;button&amp;quot; value=&amp;quot;AJAX&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;#039;;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anmerkung: Statt dem onclick im Button, kann man auch Prototypes observe Funktion nehmen, dan kann man den Code komplett in der .js Datei verwalten.&lt;br /&gt;
&lt;br /&gt;
=== JavaScript ===&lt;br /&gt;
Jetzt benötigen wir noch etwas JavaScript um die &amp;#039;&amp;#039;&amp;#039;Anfrage vom FrontendPlugi&amp;#039;&amp;#039;&amp;#039;n auszuführen:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;JavaScript (ajax.js)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
function anfrage()&lt;br /&gt;
{&lt;br /&gt;
	var myAjax = new Ajax.Request(&lt;br /&gt;
	&amp;#039;index.php&amp;#039;, // the Request goes to index.php&lt;br /&gt;
	{&lt;br /&gt;
		method: &amp;#039;get&amp;#039;, //get or post&lt;br /&gt;
		parameters: &amp;#039;eID=gbeventseid&amp;#039;,&lt;br /&gt;
		onComplete: show // after loading use the anzeige function&lt;br /&gt;
	});&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function show(orgRequest)&lt;br /&gt;
//&lt;br /&gt;
{&lt;br /&gt;
	var xmldoc = orgRequest.responseXML; //use XML Object as answer&lt;br /&gt;
	var result = xmldoc.getElementsByTagName(&amp;quot;data&amp;quot;)[0].firstChild.data;//datapart&lt;br /&gt;
	$(&amp;#039;ac&amp;#039;).innerHTML = result;//drop the stuff in the div with id &amp;quot;ac&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eine Prise TypoScript ===&lt;br /&gt;
Wir benutzen wie gesagt das Prototype Lib. Unsere &amp;#039;&amp;#039;&amp;#039;JavaScript Dateien&amp;#039;&amp;#039;&amp;#039; müssen wir natürlich auch in das Frontend Plugin &amp;#039;&amp;#039;&amp;#039;einbinden&amp;#039;&amp;#039;&amp;#039;. Das machen wir z.B. ganz einfach über TypoScript&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;TypoScript&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
page.includeJS.proto = typo3/contrib/prototype/prototype.js&lt;br /&gt;
page.includeJS.gbevents3 = EXT:gb_events/eid/ajax.js&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Weitere Beispiele ==&lt;br /&gt;
Angewendet in der kleinen Extension gbflashauth&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if (!defined (&amp;#039;PATH_typo3conf&amp;#039;)) die (&amp;#039;Access denied: eID only.&amp;#039;);&lt;br /&gt;
require_once(PATH_tslib . &amp;#039;class.tslib_pibase.php&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
class tx_gbflashauth_eid extends tslib_pibase {&lt;br /&gt;
	var $prefixId      = &amp;#039;tx_gbflashauth_eid&amp;#039;;// Same as class name&lt;br /&gt;
	var $scriptRelPath = &amp;#039;eid/class.tx_gbflashauth_eid.php&amp;#039;;	// Path to this script relative to the extension dir.&lt;br /&gt;
	var $extKey        = &amp;#039;gbflashauth&amp;#039;;// The extension key.&lt;br /&gt;
&lt;br /&gt;
	function eid_main() {&lt;br /&gt;
		$GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;fe_user = tslib_eidtools::initFeUser();&lt;br /&gt;
		tslib_eidtools::connectDB();&lt;br /&gt;
&lt;br /&gt;
		// Hier beginnt unser Code&lt;br /&gt;
		&lt;br /&gt;
		if(!empty($GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;fe_user-&amp;gt;user)){&lt;br /&gt;
			$uid = $GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;fe_user-&amp;gt;user[uid];&lt;br /&gt;
			$name = $GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;fe_user-&amp;gt;user[name];&lt;br /&gt;
			$firstname = $GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;fe_user-&amp;gt;user[first_name];&lt;br /&gt;
			$lastname = $GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;fe_user-&amp;gt;user[last_name];&lt;br /&gt;
			$email= $GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;fe_user-&amp;gt;user[email];&lt;br /&gt;
			$res=&amp;quot;login=1&amp;quot;.&amp;quot;&amp;amp;uid=&amp;quot;.$uid.&amp;quot;&amp;amp;firstname=&amp;quot;.$firstname.&amp;quot;&amp;amp;lastname=&amp;quot;.$lastname;		&lt;br /&gt;
		}else{&lt;br /&gt;
			$res = &amp;#039;login=0&amp;#039;;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		//header(&amp;#039;Expires: Mon, 26 Jul 2000 03:00:00 GMT&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Last-Modified: &amp;#039; . gmdate( &amp;quot;D, d M Y H:i:s&amp;quot; ) . &amp;#039;GMT&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Cache-Control: no-cache, must-revalidate&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Pragma: no-cache&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Content-Length: &amp;#039;.strlen($res));&lt;br /&gt;
		//header(&amp;#039;Content-Type: text/plain&amp;#039;);&lt;br /&gt;
		//echo $ajax_return_data;&lt;br /&gt;
		echo $res;&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
$extensionkey = t3lib_div::makeInstance(&amp;#039;tx_gbflashauth_eid&amp;#039;);&lt;br /&gt;
$extensionkey-&amp;gt;eid_main();&lt;br /&gt;
&lt;br /&gt;
?&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Probleme mit cc_debug und JASON Objekten ==&lt;br /&gt;
&lt;br /&gt;
von Tim Lochmüller im Adventskalender 2008&lt;br /&gt;
&lt;br /&gt;
In letzter Zeit habe ich sehr oft mit AJAX und JSON gearbeitet. Leider gibt es dabei immer ein Problem mit cc_debug, weil sich dieser immer hinter die Ausgabe des JSON Codes klemmt und damit ein kaputtes JSON erzeugt. Nachdem ich heute mit meinem Kollegen Michael zusammen gesessen habe um dieses Problem zu lösen, sind wir auf eine sehr einfache Lösung gestoßen:&lt;br /&gt;
&lt;br /&gt;
 $GLOBALS[&amp;#039;errorList&amp;#039;]-&amp;gt;clear();&lt;br /&gt;
 die(json_encode($result));&lt;br /&gt;
&lt;br /&gt;
Die Zeile 1 direkt vor der Ausgabe des JSON Codes eingebaut, verhindert, dass cc_debug noch seinen JavaScript-Code hinter her ausgibt. Und wer jetzt sagt: naje, ein die() oder exit() sollte es auch tun, der irrt sich. Versucht es gerne selber mal&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>94.216.225.184</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=AJAX_in_TYPO3_Extensions&amp;diff=19061</id>
		<title>AJAX in TYPO3 Extensions</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=AJAX_in_TYPO3_Extensions&amp;diff=19061"/>
		<updated>2012-03-20T11:57:53Z</updated>

		<summary type="html">&lt;p&gt;94.216.225.184: /* eid ajax Beispiel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Übersicht ==&lt;br /&gt;
=== Links ===&lt;br /&gt;
http://prototypejs.org/learn/introduction-to-ajax&lt;br /&gt;
&lt;br /&gt;
http://www.interaktionsdesigner.de/2009/01/04/asynchrone-datenubertragung-zwischen-typo3-und-jquery/&lt;br /&gt;
&lt;br /&gt;
=== Typo3 Skripte ohne Rendering ===&lt;br /&gt;
Ein Ajax Request wird in den meisten Fällen über ein JavaScript abgesetzt von einem Serverskript (PHP) verarbeitet und die Antwort als xml oder JSON Objekt zurückgegeben. &lt;br /&gt;
&lt;br /&gt;
Um das PHP-Skript zu nutzen und zugleich die ganzen &amp;#039;&amp;#039;&amp;#039;Rendering und Caching-Mechanismen von Typo3 zu vermeiden&amp;#039;&amp;#039;&amp;#039; könnte man irgend ein php Skript nutzen. Andererseits wollen wir die Typo3 Funktionalitäten wie dbal Datenbankabfrage etc. nutzen. Deshalb stellt Typo3 den &amp;#039;&amp;#039;&amp;#039;eid Mechanismus&amp;#039;&amp;#039;&amp;#039; zur Verfügung (siehe unten). Mit diesem wird das &amp;#039;&amp;#039;&amp;#039;Seitenrendering frühzeitig abgebrochen&amp;#039;&amp;#039;&amp;#039; und der Request direkt an ein Skript weitergegeben.&lt;br /&gt;
&lt;br /&gt;
Eine weitere Möglichkeit außer dem eid Mechanismus findest du unter [[Typo3 - alternatives Rendering]]&lt;br /&gt;
&lt;br /&gt;
=== Schnelle Antwort ===&lt;br /&gt;
Dieses Skript kann sich nun ausschließlich um die Anfrage kümmern und das Ergebnis direkt zurückgeben, welches wiederum die Daten in die Seite einhängt.&lt;br /&gt;
&lt;br /&gt;
== Der eid Mechanismus und AJAX ==&lt;br /&gt;
Quellen: http://www.typo3-tutorials.org/tutorials/extensions/eid-mechanismus.html (10.3.2010 Artikel von 2007)&lt;br /&gt;
&lt;br /&gt;
http://www.blogix.net/2009/02/08/typo3-eid-oder-daten-mit-ajax-anfordern/&lt;br /&gt;
&lt;br /&gt;
eID steht für Extension ID&lt;br /&gt;
Der eID Mechanismus ist der seit der Version 4.x dabei und kann als &amp;#039;&amp;#039;&amp;#039;alternative Rendering Engine&amp;#039;&amp;#039;&amp;#039; betrachtet werden.&lt;br /&gt;
&lt;br /&gt;
Angesprochen wird er über einen GET oder POST Parameter. Sobald &amp;#039;&amp;#039;&amp;#039;eID als Parameter in der URL&amp;#039;&amp;#039;&amp;#039; vorhanden ist (zB. &amp;#039;&amp;#039;www.domain.de/?eID=schuesselwort&amp;#039;&amp;#039;) wird der normaler Rendering Prozess sehr früh abgebrochen und auf ein Script weitergeleitet was wir selber programmieren müssen. Da der normale Rendering Prozess so früh abgebrochen wird kommt es auch noch zu keiner Ausgabe. Es wird nichts gecachet und kein HeaderCode ect generiert. Der eID Mechanismus kann also super im Zusammenhang mit AJAX verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Wollen wir uns einmal die index_ts.php (typo3/sysext/cms/tslib/) Zeile 127 bis 136 ansehen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// *********************&lt;br /&gt;
// Look for extension ID which will launch alternative output engine&lt;br /&gt;
// *********************&lt;br /&gt;
if ($temp_extId = t3lib_div::_GP(&amp;#039;eID&amp;#039;))    {&lt;br /&gt;
    if ($classPath = t3lib_div::getFileAbsFileName($TYPO3_CONF_VARS[&amp;#039;FE&amp;#039;][&amp;#039;eID_include&amp;#039;][$temp_extId]))    {&lt;br /&gt;
        require_once(PATH_tslib.&amp;#039;class.tslib_eidtools.php&amp;#039;);&lt;br /&gt;
        require($classPath);&lt;br /&gt;
    }&lt;br /&gt;
    exit;&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier wird überprüft ob der Schlüssel eID als Get/Post Variable vorhanden ist und falls ja, wird der normale Renderingprozess abgebrochen und auf unser Script verwiesen. Doch woher weiss TYPO3 jetzt wo unser Script liegt ?&lt;br /&gt;
&lt;br /&gt;
Das sagen wir Ihm über $TYPO3_CONF_VARS[&amp;#039;FE&amp;#039;][&amp;#039;eID_include&amp;#039;][$temp_extId].&lt;br /&gt;
Wir müssten entweder in die localconf.php oder in eine ext_localconf.php einer Extension folgendes Eintragen&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php &lt;br /&gt;
// Zugriff nur von Typo3 aus:&lt;br /&gt;
if (!defined (&amp;#039;TYPO3_MODE&amp;#039;)) {&lt;br /&gt;
 	die (&amp;#039;Access denied.&amp;#039;);&lt;br /&gt;
}&lt;br /&gt;
// Registrierung der eid Scripts&lt;br /&gt;
$TYPO3_CONF_VARS[&amp;#039;FE&amp;#039;][&amp;#039;eID_include&amp;#039;][&amp;#039;schluesselwort&amp;#039;] = &amp;#039;EXT:myExtKey/eid/meinScript.php&amp;#039;; ?&amp;gt;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Steht jetzt also in der Adresse &amp;#039;&amp;#039;www.domain.de/?eID=schluesselwort&amp;#039;&amp;#039; geht er in die erste if Abfrage und sieht das &amp;#039;&amp;#039;$TYPO3_CONF_VARS[&amp;#039;FE&amp;#039;][&amp;#039;eID_include&amp;#039;][$temp_extId]&amp;#039;&amp;#039; vorhanden ist und &amp;#039;&amp;#039;&amp;#039;speichert&amp;#039;&amp;#039;&amp;#039; &amp;#039;EXT:myExtKey/meinScript.php&amp;#039; in die Variable &amp;#039;&amp;#039;$classPat&amp;#039;&amp;#039;h. &amp;#039;&amp;#039;&amp;#039;Danach includiert er die Klasse eidtools und unsere eigene&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Da unser Script noch leer ist bekommen wir eine weisse Seite angezeigt in der auch der komplette Quelltext leer ist.&lt;br /&gt;
&lt;br /&gt;
Um in unserem Script nun ein FEUSER Objekt zu haben und eine aktive DB Verbindung schreiben wir&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php &lt;br /&gt;
$feUserObj = tslib_eidtools::initFeUser(); // Initialize FE user object&lt;br /&gt;
tslib_eidtools::connectDB(); //Connect to database &lt;br /&gt;
// ...&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Die erste Zeile &amp;#039;&amp;#039;&amp;#039;initialisert den FrontentUser&amp;#039;&amp;#039;&amp;#039; und gibt uns diesen als Objekt zurück.&lt;br /&gt;
&lt;br /&gt;
Die zweite Zeile stellt eine &amp;#039;&amp;#039;&amp;#039;Verbindung zur Datenbank&amp;#039;&amp;#039;&amp;#039; her.&lt;br /&gt;
&lt;br /&gt;
Im Weiteren können wir ganz normal auch TYPO3 Funktionalitäten benutzen und unseren eigenen Renderingablauf schreiben.&lt;br /&gt;
&lt;br /&gt;
Um auch &amp;#039;&amp;#039;&amp;#039;zB auf alle piBase Funktionen zurückzugreifen&amp;#039;&amp;#039;&amp;#039; können wir uns ganz einfach eine Klasse erstellen die von dieser Erbt&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
require_once(PATH_tslib.&amp;#039;class.tslib_pibase.php&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
class unsereKlasse extends tslib_pibase {&lt;br /&gt;
  function main(){&lt;br /&gt;
    $feUserObj = tslib_eidtools::initFeUser(); // Initialize FE user object        &lt;br /&gt;
    tslib_eidtools::connectDB(); //Connect to database&lt;br /&gt;
    echo(&amp;quot;hallo welt&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$output = t3lib_div::makeInstance(&amp;#039;unsereKlasse&amp;#039;);&lt;br /&gt;
$output-&amp;gt;main();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/php&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Das war es soweit, wenn Ihr noch fragen dazu habt stellt Sie einfach über die Kommentarfunktion.&lt;br /&gt;
&lt;br /&gt;
== eid ajax mit jQuery Beispiel ==&lt;br /&gt;
Quelle: s.o.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== eid ajax mit Prototype Beispiel ==&lt;br /&gt;
Bei diesem Beispiel gehen wir von einem normalen Frontend Plugin aus das z.B. mit dem Kickstarter erzeugt wird. Wir legen eine PHP-Klasse für die Bearbeitung der AJAX Anfrage an und eine JavaScript Datei mit den passenden Funktionen. Die PHP Datei wird in localconf registriert. Das Handling des AJAX Request überlassen wir der Prototype JavaScript Lib die in Typo3 schon dabei ist.&lt;br /&gt;
&lt;br /&gt;
Diese Dateien bearbeiten wir:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typo3conf/ext/myExtKey/&lt;br /&gt;
 - ext_localconf.php&lt;br /&gt;
typo3conf/ext/myExtKey/eid/&lt;br /&gt;
 - ajax.js&lt;br /&gt;
 - class.myExtKey_eid.php&lt;br /&gt;
typo3conf/ext/myExtKey/pi1/&lt;br /&gt;
 - class.myExtKey_pi1.php&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== eID Datei ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;class.myExtkey_eid.php&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if (!defined (&amp;#039;PATH_typo3conf&amp;#039;)) die (&amp;#039;Access denied: eID only.&amp;#039;);&lt;br /&gt;
require_once(PATH_tslib . &amp;#039;class.tslib_pibase.php&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
class tx_myExtKey_eid extends tslib_pibase {&lt;br /&gt;
	var $prefixId      = &amp;#039;tx_myExtKey_eid&amp;#039;;// Same as class name&lt;br /&gt;
	var $scriptRelPath = &amp;#039;eid/class.tx_myExtKey_eid.php&amp;#039;;	// Path to this script relative to the extension dir.&lt;br /&gt;
	var $extKey        = &amp;#039;myExtKey&amp;#039;;// The extension key.&lt;br /&gt;
&lt;br /&gt;
	function eid_main() {&lt;br /&gt;
		$GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;fe_user = tslib_eidtools::initFeUser();&lt;br /&gt;
		tslib_eidtools::connectDB();&lt;br /&gt;
&lt;br /&gt;
		// Hier beginnt unser Code&lt;br /&gt;
		$res = &amp;#039;Hallo Welt&amp;#039;;&lt;br /&gt;
		// Hier endet unser Code&lt;br /&gt;
&lt;br /&gt;
		// Wir geben der Anfrage ein XML Objekt zurück&lt;br /&gt;
		$ajax_return_data = t3lib_div::array2xml(array(&amp;#039;data&amp;#039;=&amp;gt;$res));&lt;br /&gt;
		header(&amp;#039;Expires: Mon, 26 Jul 2000 03:00:00 GMT&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Last-Modified: &amp;#039; . gmdate( &amp;quot;D, d M Y H:i:s&amp;quot; ) . &amp;#039;GMT&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Cache-Control: no-cache, must-revalidate&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Pragma: no-cache&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Content-Length: &amp;#039;.strlen($ajax_return_data));&lt;br /&gt;
		header(&amp;#039;Content-Type: text/xml&amp;#039;);&lt;br /&gt;
		echo $ajax_return_data;&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
$extensionkey = t3lib_div::makeInstance(&amp;#039;tx_myExtKey_eid&amp;#039;);&lt;br /&gt;
$extensionkey-&amp;gt;eid_main();&lt;br /&gt;
&lt;br /&gt;
?&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Möchte man in diesem Skript nun auf &amp;#039;&amp;#039;&amp;#039;Funktionen (z.B. Datenbank) aus dem TYPO3-Framework&amp;#039;&amp;#039;&amp;#039; zurückgreifen, so muss man für die Instantiierung selbst sorge tragen. In der Datei &amp;#039;&amp;#039;typo3_src/typo3/sysext/cms/tslib/class.tslib_eidtools.php&amp;#039;&amp;#039; findet man vorgefertigte Methoden um auf die Daten eines FE-Users oder die Datenbank zugreifen zu können (Verwendung siehe im Code oben).&lt;br /&gt;
&lt;br /&gt;
=== ext_localconf.php ===&lt;br /&gt;
Die &amp;#039;&amp;#039;&amp;#039;Datei muß noch dem System bekannt gemacht werden&amp;#039;&amp;#039;&amp;#039;. Dies tun wir in der &amp;#039;&amp;#039;&amp;#039;ext_localconf.php&amp;#039;&amp;#039;&amp;#039; indem wir folgende Zeile hinzufügen:&lt;br /&gt;
&lt;br /&gt;
 $TYPO3_CONF_VARS[&amp;#039;FE&amp;#039;][&amp;#039;eID_include&amp;#039;][&amp;#039;myExtKeyeid&amp;#039;] = &amp;#039;EXT:myExtKey/eid/class.myExtKey_eid.php&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
Hiermit sagen wir dem System das wir gerne die Datei myExtKey_eid.php ausführen würden wenn der Parameter eID=myExtKeyeid übergeben wird.&lt;br /&gt;
&lt;br /&gt;
=== Das Frontend Plugin ===&lt;br /&gt;
In unserem Frontent Plugin erzeugen wir einen div container mit der id ac (ajaxcontainer) diesen wollen wir später mit der Ausgabe des Ajax Scriptes füllen. Außerdem noch einen Knopf mit dem wir die Anfrage starten können.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;class.myExtKey_pi1.php&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
$content .= &amp;#039;&lt;br /&gt;
&amp;lt;div id=&amp;quot;ac&amp;quot;&amp;gt;ajaxcontainer&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;input onclick=&amp;quot;getData()&amp;quot; id=&amp;quot;myButton&amp;quot; type=&amp;quot;button&amp;quot; value=&amp;quot;AJAX&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;#039;;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anmerkung: Statt dem onclick im Button, kann man auch Prototypes observe Funktion nehmen, dan kann man den Code komplett in der .js Datei verwalten.&lt;br /&gt;
&lt;br /&gt;
=== JavaScript ===&lt;br /&gt;
Jetzt benötigen wir noch etwas JavaScript um die &amp;#039;&amp;#039;&amp;#039;Anfrage vom FrontendPlugi&amp;#039;&amp;#039;&amp;#039;n auszuführen:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;JavaScript (ajax.js)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
function anfrage()&lt;br /&gt;
{&lt;br /&gt;
	var myAjax = new Ajax.Request(&lt;br /&gt;
	&amp;#039;index.php&amp;#039;, // the Request goes to index.php&lt;br /&gt;
	{&lt;br /&gt;
		method: &amp;#039;get&amp;#039;, //get or post&lt;br /&gt;
		parameters: &amp;#039;eID=gbeventseid&amp;#039;,&lt;br /&gt;
		onComplete: show // after loading use the anzeige function&lt;br /&gt;
	});&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function show(orgRequest)&lt;br /&gt;
//&lt;br /&gt;
{&lt;br /&gt;
	var xmldoc = orgRequest.responseXML; //use XML Object as answer&lt;br /&gt;
	var result = xmldoc.getElementsByTagName(&amp;quot;data&amp;quot;)[0].firstChild.data;//datapart&lt;br /&gt;
	$(&amp;#039;ac&amp;#039;).innerHTML = result;//drop the stuff in the div with id &amp;quot;ac&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eine Prise TypoScript ===&lt;br /&gt;
Wir benutzen wie gesagt das Prototype Lib. Unsere &amp;#039;&amp;#039;&amp;#039;JavaScript Dateien&amp;#039;&amp;#039;&amp;#039; müssen wir natürlich auch in das Frontend Plugin &amp;#039;&amp;#039;&amp;#039;einbinden&amp;#039;&amp;#039;&amp;#039;. Das machen wir z.B. ganz einfach über TypoScript&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;TypoScript&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
page.includeJS.proto = typo3/contrib/prototype/prototype.js&lt;br /&gt;
page.includeJS.gbevents3 = EXT:gb_events/eid/ajax.js&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Weitere Beispiele ===&lt;br /&gt;
Angewendet in der kleinen Extension gbflashauth&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if (!defined (&amp;#039;PATH_typo3conf&amp;#039;)) die (&amp;#039;Access denied: eID only.&amp;#039;);&lt;br /&gt;
require_once(PATH_tslib . &amp;#039;class.tslib_pibase.php&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
class tx_gbflashauth_eid extends tslib_pibase {&lt;br /&gt;
	var $prefixId      = &amp;#039;tx_gbflashauth_eid&amp;#039;;// Same as class name&lt;br /&gt;
	var $scriptRelPath = &amp;#039;eid/class.tx_gbflashauth_eid.php&amp;#039;;	// Path to this script relative to the extension dir.&lt;br /&gt;
	var $extKey        = &amp;#039;gbflashauth&amp;#039;;// The extension key.&lt;br /&gt;
&lt;br /&gt;
	function eid_main() {&lt;br /&gt;
		$GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;fe_user = tslib_eidtools::initFeUser();&lt;br /&gt;
		tslib_eidtools::connectDB();&lt;br /&gt;
&lt;br /&gt;
		// Hier beginnt unser Code&lt;br /&gt;
		&lt;br /&gt;
		if(!empty($GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;fe_user-&amp;gt;user)){&lt;br /&gt;
			$uid = $GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;fe_user-&amp;gt;user[uid];&lt;br /&gt;
			$name = $GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;fe_user-&amp;gt;user[name];&lt;br /&gt;
			$firstname = $GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;fe_user-&amp;gt;user[first_name];&lt;br /&gt;
			$lastname = $GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;fe_user-&amp;gt;user[last_name];&lt;br /&gt;
			$email= $GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;fe_user-&amp;gt;user[email];&lt;br /&gt;
			$res=&amp;quot;login=1&amp;quot;.&amp;quot;&amp;amp;uid=&amp;quot;.$uid.&amp;quot;&amp;amp;firstname=&amp;quot;.$firstname.&amp;quot;&amp;amp;lastname=&amp;quot;.$lastname;		&lt;br /&gt;
		}else{&lt;br /&gt;
			$res = &amp;#039;login=0&amp;#039;;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		//header(&amp;#039;Expires: Mon, 26 Jul 2000 03:00:00 GMT&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Last-Modified: &amp;#039; . gmdate( &amp;quot;D, d M Y H:i:s&amp;quot; ) . &amp;#039;GMT&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Cache-Control: no-cache, must-revalidate&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Pragma: no-cache&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Content-Length: &amp;#039;.strlen($res));&lt;br /&gt;
		//header(&amp;#039;Content-Type: text/plain&amp;#039;);&lt;br /&gt;
		//echo $ajax_return_data;&lt;br /&gt;
		echo $res;&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
$extensionkey = t3lib_div::makeInstance(&amp;#039;tx_gbflashauth_eid&amp;#039;);&lt;br /&gt;
$extensionkey-&amp;gt;eid_main();&lt;br /&gt;
&lt;br /&gt;
?&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Probleme mit cc_debug und JASON Objekten ==&lt;br /&gt;
&lt;br /&gt;
von Tim Lochmüller im Adventskalender 2008&lt;br /&gt;
&lt;br /&gt;
In letzter Zeit habe ich sehr oft mit AJAX und JSON gearbeitet. Leider gibt es dabei immer ein Problem mit cc_debug, weil sich dieser immer hinter die Ausgabe des JSON Codes klemmt und damit ein kaputtes JSON erzeugt. Nachdem ich heute mit meinem Kollegen Michael zusammen gesessen habe um dieses Problem zu lösen, sind wir auf eine sehr einfache Lösung gestoßen:&lt;br /&gt;
&lt;br /&gt;
 $GLOBALS[&amp;#039;errorList&amp;#039;]-&amp;gt;clear();&lt;br /&gt;
 die(json_encode($result));&lt;br /&gt;
&lt;br /&gt;
Die Zeile 1 direkt vor der Ausgabe des JSON Codes eingebaut, verhindert, dass cc_debug noch seinen JavaScript-Code hinter her ausgibt. Und wer jetzt sagt: naje, ein die() oder exit() sollte es auch tun, der irrt sich. Versucht es gerne selber mal&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>94.216.225.184</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=AJAX_in_TYPO3_Extensions&amp;diff=19060</id>
		<title>AJAX in TYPO3 Extensions</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=AJAX_in_TYPO3_Extensions&amp;diff=19060"/>
		<updated>2012-03-20T11:52:13Z</updated>

		<summary type="html">&lt;p&gt;94.216.225.184: /* Links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Übersicht ==&lt;br /&gt;
=== Links ===&lt;br /&gt;
http://prototypejs.org/learn/introduction-to-ajax&lt;br /&gt;
&lt;br /&gt;
http://www.interaktionsdesigner.de/2009/01/04/asynchrone-datenubertragung-zwischen-typo3-und-jquery/&lt;br /&gt;
&lt;br /&gt;
=== Typo3 Skripte ohne Rendering ===&lt;br /&gt;
Ein Ajax Request wird in den meisten Fällen über ein JavaScript abgesetzt von einem Serverskript (PHP) verarbeitet und die Antwort als xml oder JSON Objekt zurückgegeben. &lt;br /&gt;
&lt;br /&gt;
Um das PHP-Skript zu nutzen und zugleich die ganzen &amp;#039;&amp;#039;&amp;#039;Rendering und Caching-Mechanismen von Typo3 zu vermeiden&amp;#039;&amp;#039;&amp;#039; könnte man irgend ein php Skript nutzen. Andererseits wollen wir die Typo3 Funktionalitäten wie dbal Datenbankabfrage etc. nutzen. Deshalb stellt Typo3 den &amp;#039;&amp;#039;&amp;#039;eid Mechanismus&amp;#039;&amp;#039;&amp;#039; zur Verfügung (siehe unten). Mit diesem wird das &amp;#039;&amp;#039;&amp;#039;Seitenrendering frühzeitig abgebrochen&amp;#039;&amp;#039;&amp;#039; und der Request direkt an ein Skript weitergegeben.&lt;br /&gt;
&lt;br /&gt;
Eine weitere Möglichkeit außer dem eid Mechanismus findest du unter [[Typo3 - alternatives Rendering]]&lt;br /&gt;
&lt;br /&gt;
=== Schnelle Antwort ===&lt;br /&gt;
Dieses Skript kann sich nun ausschließlich um die Anfrage kümmern und das Ergebnis direkt zurückgeben, welches wiederum die Daten in die Seite einhängt.&lt;br /&gt;
&lt;br /&gt;
== Der eid Mechanismus und AJAX ==&lt;br /&gt;
Quellen: http://www.typo3-tutorials.org/tutorials/extensions/eid-mechanismus.html (10.3.2010 Artikel von 2007)&lt;br /&gt;
&lt;br /&gt;
http://www.blogix.net/2009/02/08/typo3-eid-oder-daten-mit-ajax-anfordern/&lt;br /&gt;
&lt;br /&gt;
eID steht für Extension ID&lt;br /&gt;
Der eID Mechanismus ist der seit der Version 4.x dabei und kann als &amp;#039;&amp;#039;&amp;#039;alternative Rendering Engine&amp;#039;&amp;#039;&amp;#039; betrachtet werden.&lt;br /&gt;
&lt;br /&gt;
Angesprochen wird er über einen GET oder POST Parameter. Sobald &amp;#039;&amp;#039;&amp;#039;eID als Parameter in der URL&amp;#039;&amp;#039;&amp;#039; vorhanden ist (zB. &amp;#039;&amp;#039;www.domain.de/?eID=schuesselwort&amp;#039;&amp;#039;) wird der normaler Rendering Prozess sehr früh abgebrochen und auf ein Script weitergeleitet was wir selber programmieren müssen. Da der normale Rendering Prozess so früh abgebrochen wird kommt es auch noch zu keiner Ausgabe. Es wird nichts gecachet und kein HeaderCode ect generiert. Der eID Mechanismus kann also super im Zusammenhang mit AJAX verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Wollen wir uns einmal die index_ts.php (typo3/sysext/cms/tslib/) Zeile 127 bis 136 ansehen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// *********************&lt;br /&gt;
// Look for extension ID which will launch alternative output engine&lt;br /&gt;
// *********************&lt;br /&gt;
if ($temp_extId = t3lib_div::_GP(&amp;#039;eID&amp;#039;))    {&lt;br /&gt;
    if ($classPath = t3lib_div::getFileAbsFileName($TYPO3_CONF_VARS[&amp;#039;FE&amp;#039;][&amp;#039;eID_include&amp;#039;][$temp_extId]))    {&lt;br /&gt;
        require_once(PATH_tslib.&amp;#039;class.tslib_eidtools.php&amp;#039;);&lt;br /&gt;
        require($classPath);&lt;br /&gt;
    }&lt;br /&gt;
    exit;&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier wird überprüft ob der Schlüssel eID als Get/Post Variable vorhanden ist und falls ja, wird der normale Renderingprozess abgebrochen und auf unser Script verwiesen. Doch woher weiss TYPO3 jetzt wo unser Script liegt ?&lt;br /&gt;
&lt;br /&gt;
Das sagen wir Ihm über $TYPO3_CONF_VARS[&amp;#039;FE&amp;#039;][&amp;#039;eID_include&amp;#039;][$temp_extId].&lt;br /&gt;
Wir müssten entweder in die localconf.php oder in eine ext_localconf.php einer Extension folgendes Eintragen&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php &lt;br /&gt;
// Zugriff nur von Typo3 aus:&lt;br /&gt;
if (!defined (&amp;#039;TYPO3_MODE&amp;#039;)) {&lt;br /&gt;
 	die (&amp;#039;Access denied.&amp;#039;);&lt;br /&gt;
}&lt;br /&gt;
// Registrierung der eid Scripts&lt;br /&gt;
$TYPO3_CONF_VARS[&amp;#039;FE&amp;#039;][&amp;#039;eID_include&amp;#039;][&amp;#039;schluesselwort&amp;#039;] = &amp;#039;EXT:myExtKey/eid/meinScript.php&amp;#039;; ?&amp;gt;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Steht jetzt also in der Adresse &amp;#039;&amp;#039;www.domain.de/?eID=schluesselwort&amp;#039;&amp;#039; geht er in die erste if Abfrage und sieht das &amp;#039;&amp;#039;$TYPO3_CONF_VARS[&amp;#039;FE&amp;#039;][&amp;#039;eID_include&amp;#039;][$temp_extId]&amp;#039;&amp;#039; vorhanden ist und &amp;#039;&amp;#039;&amp;#039;speichert&amp;#039;&amp;#039;&amp;#039; &amp;#039;EXT:myExtKey/meinScript.php&amp;#039; in die Variable &amp;#039;&amp;#039;$classPat&amp;#039;&amp;#039;h. &amp;#039;&amp;#039;&amp;#039;Danach includiert er die Klasse eidtools und unsere eigene&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Da unser Script noch leer ist bekommen wir eine weisse Seite angezeigt in der auch der komplette Quelltext leer ist.&lt;br /&gt;
&lt;br /&gt;
Um in unserem Script nun ein FEUSER Objekt zu haben und eine aktive DB Verbindung schreiben wir&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php &lt;br /&gt;
$feUserObj = tslib_eidtools::initFeUser(); // Initialize FE user object&lt;br /&gt;
tslib_eidtools::connectDB(); //Connect to database &lt;br /&gt;
// ...&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Die erste Zeile &amp;#039;&amp;#039;&amp;#039;initialisert den FrontentUser&amp;#039;&amp;#039;&amp;#039; und gibt uns diesen als Objekt zurück.&lt;br /&gt;
&lt;br /&gt;
Die zweite Zeile stellt eine &amp;#039;&amp;#039;&amp;#039;Verbindung zur Datenbank&amp;#039;&amp;#039;&amp;#039; her.&lt;br /&gt;
&lt;br /&gt;
Im Weiteren können wir ganz normal auch TYPO3 Funktionalitäten benutzen und unseren eigenen Renderingablauf schreiben.&lt;br /&gt;
&lt;br /&gt;
Um auch &amp;#039;&amp;#039;&amp;#039;zB auf alle piBase Funktionen zurückzugreifen&amp;#039;&amp;#039;&amp;#039; können wir uns ganz einfach eine Klasse erstellen die von dieser Erbt&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
require_once(PATH_tslib.&amp;#039;class.tslib_pibase.php&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
class unsereKlasse extends tslib_pibase {&lt;br /&gt;
  function main(){&lt;br /&gt;
    $feUserObj = tslib_eidtools::initFeUser(); // Initialize FE user object        &lt;br /&gt;
    tslib_eidtools::connectDB(); //Connect to database&lt;br /&gt;
    echo(&amp;quot;hallo welt&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$output = t3lib_div::makeInstance(&amp;#039;unsereKlasse&amp;#039;);&lt;br /&gt;
$output-&amp;gt;main();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/php&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Das war es soweit, wenn Ihr noch fragen dazu habt stellt Sie einfach über die Kommentarfunktion.&lt;br /&gt;
&lt;br /&gt;
== eid ajax Beispiel ==&lt;br /&gt;
Bei diesem Beispiel gehen wir von einem normalen Frontend Plugin aus das z.B. mit dem Kickstarter erzeugt wird. Wir legen eine PHP-Klasse für die Bearbeitung der AJAX Anfrage an und eine JavaScript Datei mit den passenden Funktionen. Die PHP Datei wird in localconf registriert. Das Handling des AJAX Request überlassen wir der Prototype JavaScript Lib die in Typo3 schon dabei ist.&lt;br /&gt;
&lt;br /&gt;
Diese Dateien bearbeiten wir:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typo3conf/ext/myExtKey/&lt;br /&gt;
 - ext_localconf.php&lt;br /&gt;
typo3conf/ext/myExtKey/eid/&lt;br /&gt;
 - ajax.js&lt;br /&gt;
 - class.myExtKey_eid.php&lt;br /&gt;
typo3conf/ext/myExtKey/pi1/&lt;br /&gt;
 - class.myExtKey_pi1.php&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== eID Datei ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;class.myExtkey_eid.php&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if (!defined (&amp;#039;PATH_typo3conf&amp;#039;)) die (&amp;#039;Access denied: eID only.&amp;#039;);&lt;br /&gt;
require_once(PATH_tslib . &amp;#039;class.tslib_pibase.php&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
class tx_myExtKey_eid extends tslib_pibase {&lt;br /&gt;
	var $prefixId      = &amp;#039;tx_myExtKey_eid&amp;#039;;// Same as class name&lt;br /&gt;
	var $scriptRelPath = &amp;#039;eid/class.tx_myExtKey_eid.php&amp;#039;;	// Path to this script relative to the extension dir.&lt;br /&gt;
	var $extKey        = &amp;#039;myExtKey&amp;#039;;// The extension key.&lt;br /&gt;
&lt;br /&gt;
	function eid_main() {&lt;br /&gt;
		$GLOBALS[&amp;#039;TSFE&amp;#039;]-&amp;gt;fe_user = tslib_eidtools::initFeUser();&lt;br /&gt;
		tslib_eidtools::connectDB();&lt;br /&gt;
&lt;br /&gt;
		// Hier beginnt unser Code&lt;br /&gt;
		$res = &amp;#039;Hallo Welt&amp;#039;;&lt;br /&gt;
		// Hier endet unser Code&lt;br /&gt;
&lt;br /&gt;
		// Wir geben der Anfrage ein XML Objekt zurück&lt;br /&gt;
		$ajax_return_data = t3lib_div::array2xml(array(&amp;#039;data&amp;#039;=&amp;gt;$res));&lt;br /&gt;
		header(&amp;#039;Expires: Mon, 26 Jul 2000 03:00:00 GMT&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Last-Modified: &amp;#039; . gmdate( &amp;quot;D, d M Y H:i:s&amp;quot; ) . &amp;#039;GMT&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Cache-Control: no-cache, must-revalidate&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Pragma: no-cache&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Content-Length: &amp;#039;.strlen($ajax_return_data));&lt;br /&gt;
		header(&amp;#039;Content-Type: text/xml&amp;#039;);&lt;br /&gt;
		echo $ajax_return_data;&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
$extensionkey = t3lib_div::makeInstance(&amp;#039;tx_myExtKey_eid&amp;#039;);&lt;br /&gt;
$extensionkey-&amp;gt;eid_main();&lt;br /&gt;
&lt;br /&gt;
?&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Möchte man in diesem Skript nun auf &amp;#039;&amp;#039;&amp;#039;Funktionen (z.B. Datenbank) aus dem TYPO3-Framework&amp;#039;&amp;#039;&amp;#039; zurückgreifen, so muss man für die Instantiierung selbst sorge tragen. In der Datei &amp;#039;&amp;#039;typo3_src/typo3/sysext/cms/tslib/class.tslib_eidtools.php&amp;#039;&amp;#039; findet man vorgefertigte Methoden um auf die Daten eines FE-Users oder die Datenbank zugreifen zu können (Verwendung siehe im Code oben).&lt;br /&gt;
&lt;br /&gt;
=== ext_localconf.php ===&lt;br /&gt;
Die &amp;#039;&amp;#039;&amp;#039;Datei muß noch dem System bekannt gemacht werden&amp;#039;&amp;#039;&amp;#039;. Dies tun wir in der &amp;#039;&amp;#039;&amp;#039;ext_localconf.php&amp;#039;&amp;#039;&amp;#039; indem wir folgende Zeile hinzufügen:&lt;br /&gt;
&lt;br /&gt;
 $TYPO3_CONF_VARS[&amp;#039;FE&amp;#039;][&amp;#039;eID_include&amp;#039;][&amp;#039;myExtKeyeid&amp;#039;] = &amp;#039;EXT:myExtKey/eid/class.myExtKey_eid.php&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
Hiermit sagen wir dem System das wir gerne die Datei myExtKey_eid.php ausführen würden wenn der Parameter eID=myExtKeyeid übergeben wird.&lt;br /&gt;
&lt;br /&gt;
=== Das Frontend Plugin ===&lt;br /&gt;
In unserem Frontent Plugin erzeugen wir einen div container mit der id ac (ajaxcontainer) diesen wollen wir später mit der Ausgabe des Ajax Scriptes füllen. Außerdem noch einen Knopf mit dem wir die Anfrage starten können.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;class.myExtKey_pi1.php&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
$content .= &amp;#039;&lt;br /&gt;
&amp;lt;div id=&amp;quot;ac&amp;quot;&amp;gt;ajaxcontainer&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;input onclick=&amp;quot;getData()&amp;quot; id=&amp;quot;myButton&amp;quot; type=&amp;quot;button&amp;quot; value=&amp;quot;AJAX&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;#039;;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anmerkung: Statt dem onclick im Button, kann man auch Prototypes observe Funktion nehmen, dan kann man den Code komplett in der .js Datei verwalten.&lt;br /&gt;
&lt;br /&gt;
=== JavaScript ===&lt;br /&gt;
Jetzt benötigen wir noch etwas JavaScript um die &amp;#039;&amp;#039;&amp;#039;Anfrage vom FrontendPlugi&amp;#039;&amp;#039;&amp;#039;n auszuführen:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;JavaScript (ajax.js)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
function anfrage()&lt;br /&gt;
{&lt;br /&gt;
	var myAjax = new Ajax.Request(&lt;br /&gt;
	&amp;#039;index.php&amp;#039;, // the Request goes to index.php&lt;br /&gt;
	{&lt;br /&gt;
		method: &amp;#039;get&amp;#039;, //get or post&lt;br /&gt;
		parameters: &amp;#039;eID=gbeventseid&amp;#039;,&lt;br /&gt;
		onComplete: show // after loading use the anzeige function&lt;br /&gt;
	});&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function show(orgRequest)&lt;br /&gt;
//&lt;br /&gt;
{&lt;br /&gt;
	var xmldoc = orgRequest.responseXML; //use XML Object as answer&lt;br /&gt;
	var result = xmldoc.getElementsByTagName(&amp;quot;data&amp;quot;)[0].firstChild.data;//datapart&lt;br /&gt;
	$(&amp;#039;ac&amp;#039;).innerHTML = result;//drop the stuff in the div with id &amp;quot;ac&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eine Prise TypoScript ===&lt;br /&gt;
Wir benutzen wie gesagt das Prototype Lib. Unsere &amp;#039;&amp;#039;&amp;#039;JavaScript Dateien&amp;#039;&amp;#039;&amp;#039; müssen wir natürlich auch in das Frontend Plugin &amp;#039;&amp;#039;&amp;#039;einbinden&amp;#039;&amp;#039;&amp;#039;. Das machen wir z.B. ganz einfach über TypoScript&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;TypoScript&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
page.includeJS.proto = typo3/contrib/prototype/prototype.js&lt;br /&gt;
page.includeJS.gbevents3 = EXT:gb_events/eid/ajax.js&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== andere Frameworks ===&lt;br /&gt;
Todo&lt;br /&gt;
&lt;br /&gt;
== Probleme mit cc_debug und JASON Objekten ==&lt;br /&gt;
&lt;br /&gt;
von Tim Lochmüller im Adventskalender 2008&lt;br /&gt;
&lt;br /&gt;
In letzter Zeit habe ich sehr oft mit AJAX und JSON gearbeitet. Leider gibt es dabei immer ein Problem mit cc_debug, weil sich dieser immer hinter die Ausgabe des JSON Codes klemmt und damit ein kaputtes JSON erzeugt. Nachdem ich heute mit meinem Kollegen Michael zusammen gesessen habe um dieses Problem zu lösen, sind wir auf eine sehr einfache Lösung gestoßen:&lt;br /&gt;
&lt;br /&gt;
 $GLOBALS[&amp;#039;errorList&amp;#039;]-&amp;gt;clear();&lt;br /&gt;
 die(json_encode($result));&lt;br /&gt;
&lt;br /&gt;
Die Zeile 1 direkt vor der Ausgabe des JSON Codes eingebaut, verhindert, dass cc_debug noch seinen JavaScript-Code hinter her ausgibt. Und wer jetzt sagt: naje, ein die() oder exit() sollte es auch tun, der irrt sich. Versucht es gerne selber mal&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>94.216.225.184</name></author>
	</entry>
</feed>