Es finden sich einige Extensions, bei denen Parameter für einen Ajax-Call wie im nachfolgenden Beispiel übergeben werden. Das ist zunächst nur unkomfortabel, da die Parameter hier fix im Script hinterlegt sind. Problematisch ist es zusätzlich aber insofern, da hierbei der Sicheitsmechanismus von Extbase quasi umgangen wird: Ein Fluid-Formular enthält nämlich neben den gewünschten Properties zusätzlich automatisch generierte versteckte Felder - diese sollten definitiv nicht unterschlagen werden (programming secure extensions).

Anstelle also wie im ersten Beispiel die Parameter einzeln im Script zu definieren, sollte man in den meisten Fällen das gesamte Formular mit der Methode .serialize() senden. Dass das Formular über entsprechende Fluid-ViewHelper generiert wird und nicht händisch zusammengebaut werden sollte, versteht sich von selbst.

Falsch!

jQuery(document).on("click", "#myform button.submit", function(e){
	$.ajax({
		url: '/?type=12345&tx_myext_test[action]=create&tx_myext_test[controller]=Test',
		type: "POST",
		data: '' 
			+ '&tx_myext_test[post]=' + post
			+ '&tx_myext_test[authorName]=' + authorName
			+ '&tx_myext_test[authorEmail]=' + authorEmail
			+ '&tx_myext_test[text]=' + text
			,
		dataType: 'json',        
		success: function(response) {
			// Do anything...         
		},
		error: function(error) {
			// Do anything...
		}
	});
});

Richtig!

jQuery(document).on("click", "#myform button.submit", function(e){
	$.ajax({
		url: '/?type=12345&tx_myext_test[action]=create&tx_myext_test[controller]=Test',
		type: "POST",
		data : $("#myform").serialize(),
		dataType: 'json',        
		success: function(response) {
			// Do anything...         
		},
		error: function(error) {
			// Do anything...
		}
	});
});

Die "hidden"-Fields

<input type="hidden" value="Myext" name="tx_myext_ajax[__referrer][@extension]">
<input type="hidden" value="Vendor" name="tx_myext_ajax[__referrer][@vendor]">
<input type="hidden" value="Comment" name="tx_myext_ajax[__referrer][@controller]">
<input type="hidden" value="new" name="tx_myext_ajax[__referrer][@action]">
<input type="hidden" value="YTozOntzOjY6ImFjdGlvbiI7czozOiJuZXciO3M6MTA6ImNvbnRyb2xsZXIiO3M6NzoiQ29tbWVudCI7czo0OiJwb3N0IjtzOjE6IjciO30=7da9ac0281763695a07cebc6dcdf885bbda8971a" name="tx_myext_ajax[__referrer][arguments]">
<input type="hidden" value="a:1:{s:10:"newComment";a:4:{s:4:"post";i:1;s:10:"authorName";i:1;s:11:"authorEmail";i:1;s:4:"text";i:1;}}d512b30419738a8c310761fa34a5ea83efe1d83d" name="tx_myext_ajax[__trustedProperties]">




Kommentare

Jens schrieb am 02.06.2015:
Ich habe heute das erste Mal ein Formular mit Ajax verarbeitet und siehe da: gleich falsch gemacht :) Dankeschön für deinen Beitrag. Wird morgen früh gleich ausgebessert.

---

Dein anderer Beitrag "Extbase - Ajax Form Submit - Validation" vom 29.03.2015 würde ich auch gerne lesen wollen, nur werde ich beim Aufrufen auf eine 404-Seite weitergeleitet.

TYPO3 Tiger schrieb am 02.06.2015:
Hi Jens, das freut mich. Danke auch für den Hinweis, der andere Beitrag ist jetzt wieder erreichbar. Viel Spaß beim Lesen ;)

Christian schrieb am 05.12.2017:
Kann es sein, das unter TYPO3 8 das so nicht mehr funktioniert?

Christian schrieb am 05.12.2017:
Geht doch. Man musste [FE][pageNotFoundOnCHashError] auf false setzen