Zum Inhalt springen

Ajax und Extbase

Erstellt am 14. Oktober 2014 · 1 Antwort · letzte Antwort am 15. Oktober 2014

Tags: Bootstrap, JavaScript & AJAX, Frage

daFalk ·

Hi,

mich beschäftigt folgendes Problem:
ich entwickel unter TYPO3 6.2 eine im Prinzip simple Gallery-Extension. Der extensionkey ist fr_gallery. Den ersten roundtrip habe ich mit dem Extension-Builder gemacht.

Nun möchte ich über AJAX einzelne Bilder nachladen. Dazu muss ich eine URL-Aufruf an einen meinen ItemController an die Atcion singleshowAction schicken. Dort steht momentan nur return('bla'); drin.

Leider bekomme ich nichts zurück außer:

[]
<!-- Parsetime: 0ms -->

Was mache ich falsch?

meine ext_localconf:

\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin(
		'FR.' . $_EXTKEY,
		'Ajax',
		array(
				'Item' => 'showsingle'
		),
		// non-cacheable actions
		array(
				'Item' => 'showsingle'
		)
);

mein TS:

tx_frgallery_ajax = PAGE
tx_frgallery_ajax {
  typeNum = 666
  config {
    disableAllHeaderCode = 1
    xhtml_cleaning = 0
    admPanel = 0
    additionalHeaders = Content-type: text/plain
    no_cache = 1
  }


  	
		10 = USER
	   	10 { 
	        userFunc = TYPO3\CMS\Extbase\Core\Bootstrap->run
	        pluginName = Ajax
	        extensionName = FrGallery
	        controller = Item
	        vendorName = FR
	        action = showsingle
	        switchableControllerActions {
	          Item { 
	            1 = showsingle
	          }
	        }
	     
	        settings =< plugin.tx_fr_gallery.settings
	        persistence =< plugin.tx_fr_gallery.persistence
	        view =< plugin.tx_fr_gallery.view
	        update =< plugin.tx_fr_gallery.update
	        
	  }
}

Wenn ich jetzt im Browser einen der folgenden Links aufrufe passiert nix ausser oben beschriebene Ausgabe.

index.php?type=666&tx_frgallery_ajax[action]=showsingle&tx_frgallery_ajax[controller]=Item
index.php?type=666&tx_fr_gallery_ajax[action]=showsingle&tx_fr_gallery_ajax[controller]=Item
index.php?type=666&fr_gallery_ajax[action]=showsingle&fr_gallery_ajax[controller]=Item

Doch eigentlich müsste jetzt doch ein bla zurückkommen oder?

Den Weg über Dispatcher hab ich den ganzen Tag schon versucht mit noch weniger Erfolg.

Hoffe dass mir jemand helfen kann.

bestes! Falk

daFalk ·

Also, es läuft nun soweit.
Das neue TS:

ajaxCall = PAGE
ajaxCall {
	typeNum = 667
	config {
		disableAllHeaderCode = 1
		# Folgendes: Es gibt verschiedene headertypen. ich hab ehier zu Testzwecken html gfenommen, da ich mir ein Bild zurückschicken habe lassen.
		#additionalHeaders = Content-type:application/json
		additionalHeaders = Content-type:text/html
		xhtml_cleaning = 0
		admPanel = 0
		debug = 1
		no_cache = 1
		metaCharset = UTF-8
	}
		10 = USER
	   	10 { 
	        userFunc = TYPO3\CMS\Extbase\Core\Bootstrap->run
	        pluginName = Ajax
	        extensionName = FrGallery
	        controller = Item
	        vendorName = FR
	        action = showsingle
	        switchableControllerActions {
	          Item { 
	            1 = showsingle
	          }
	        }
	     
	        settings =< plugin.tx_fr_gallery.settings
	        persistence =< plugin.tx_fr_gallery.persistence
	        view =< plugin.tx_fr_gallery.view
	        update =< plugin.tx_fr_gallery.update
	        #Folgendes sollte eigentlich in der constants eurer Extension angegeben werden, je nachdem wo eure DS gespeichert werden, also anpassen. :)
	        persistence.storagePid = 22
	  }

}

nun kann ich alles aufrufen in dem ich, egal wo ich mich befinde, einfach ?type=667 anhänge.

Beim AJAX-Aufruf allerdings gibts noch eine Besonderheit:

function loadImage(){
    if($xhr !== undefined) { $xhr.abort(); } 
    $xhr = $.ajax({
        url: "http://www.deineurl.de/index.php?type=667" ,
        type: "GET",
        

        success: function(data) {
           
            console.log(data)
        },
        error: function(error) {
           console.log(error.responseText);               
        }
    });
}

Wenn keine Headermitgesandt werden (disableAllHeaderCode =1) dann kommt das Ergebnis ins error.responseText. Das nervt.

Bestes.