Ajax funktionalität nutzen

Hallo Zusammen,
ich versuche einen Wert, den ein Benutzer eingegeben hat, per Ajax an meine php funktion zu übergeben.

Mein JS:


jQuery('#input').click(function(){
    $wert = $('#input').val();

    jQuery.get('/modules/kürzel/meinmodul/controller/mein_controller.php?wert=' + $wert, function meineFunktion($wert) {
    });  
})

Mein php:


    public function meineFunktion($wert) {
        echo $wert;
    }

Wenn ich das ganze nun ausprobiere bekomme ich folgende Fehlermeldung:
Fatal error: Class ‘oxUBase’ not found in /home/www/htdocs/modules/kürzel/meinmodul/controller/mein_controller.php on line 8

In Zeile 8 steht:
class mein_controller extends oxUBase {

Jemand eine Idee wie ich den Aufruf/die Wert übergabe hin bekomme?

Später möchte ich über die php Funktion einen Rückgabewert an das JS geben, vielleicht hat hierzu auch schon jemand eine Idee.

1 Like

lies die Tutorials zur Modulentwicklung mal durch

Welchen Teil meinst du genau?
Ich kann werder in [B]How to Extend OXID eShop With Modules (Part 1) [/B]noch in [B]How to Extend OXID eShop With Modules (Part 2)[/B] etwas zu der Thematik finden.

Wenn du Oxid MVC benutzen willst kannst du deine Datei nicht mit /modules/kürzel/meinmodul/controller/mein_controller.php aufrufen sondern mit index.php?cl=mein_controller und über das array “files” in metadata.php deinen controller dem autoloader bekannt machen.

Hi Frank,
danke für die Antwort.
Die Klasse habe ich schon über die metadata in Files eingebunden.

Wenn ich
jQuery.get(’/modules/kürzel/meinmodul/controller/mein_controller.php?wert=’ + $wert, function meineFunktion($wert) {

in
jQuery.get(’/index.php?cl=mein_controller?wert=’ + $wert, function meineFunktion($wert) {
ändere.

Wird mir nur die Shop E-Mail Adresse angezeigt und ich lande in einer Endlosschleife.

So also der Aufruf der php Funktion funktioniert jetzt mit:


        jQuery.post('index.php?cl=mein_controller', { fnc: "meineFunktion", wert: $wert }, function(data) {
            console.log(data);
        });

Allerdings kommt $wert nicht an oder ich frage es falsch ab.

Hier mein Abfrage Versuch:


$wert = $this->getConfig()->getConfigParam('wert');
var_dump($wert);

Als Rückgabe(console.log(data):wink: bekomme ich nur einen leeren String und einen haufen xdebugger Müll.

Rufe ich den Wert falsch ab ober übergeben ich den schon falsch?

MVC funktioniert bisschen anders als du denkst.
Die View Klassen müssen ein Template zurückgeben. Und in diesem Template kannst du dann alles ausgeben was du möchtest. Eine X-Beliebige Klasse kann nicht einfach so irgendwas auf der Webseite ausgeben.
schau mal die Klassen an, die übers Frontend aufrufbar sind. Welche Klasse steht dort hinter dem “extends”? Und schau dir render() Funktion an.

[B]UPDATE:[/B] okay ich habe den Wert jetzt über oxConfig::getParameter(‘wert’) bekommen.

Bleibt noch das problem mit dem xdebugger Müll

ich weiß,dass dein Modul oxUBase erweitert, das ist auch soweit korrekt. Nur deinem Modul fehlt die entscheidende Funktionalität, die für die Anzeige von Daten sorgt

[QUOTE=nerd;110447][B]UPDATE:[/B] okay ich habe den Wert jetzt über oxConfig::getParameter(‘wert’) bekommen.

Bleibt noch das problem mit dem xdebugger Müll[/QUOTE]
Hast du debugging in oxconfig eingeschaltet, meinst du das? Das kannst du im Ajax-View abschalten:

$this->getConfig()->setConfigParam( 'iDebug', 0 );

Ah okay, ich übergebe jetzt einen zusätzlichen Paramenter über mein post


jQuery.post('index.php?cl=mein_controller', { fnc: "meineFunktion", wert: $wert, ladetpl: 'showtpl' }, function(data) {
            console.log(data);
        });

In meinem Render sage ich jetzt, wenn der Parameter übergeben, dann zeige ein anderes.tpl. Das funktioniert jetzt auch.

(In anderes.tpl steht jetzt nur TEST)

Wenn ich jetzt alles wieder auslösen wird mir folgendes angezeigt.
rückgabewertderphpfunktion
xdebug Meldungen
"Warning: Cannot modify header information - headers already sent by…"
TEST

Ich weiß aber nicht woher das kommen könnte. Ich habe keine var_dump oder irgendetwas eingebaut.

Woher das kommt steht in der Fehlermeldung die du abgeschnitten hast.

ja das kommt von htdocs/core/oxutils.php on line 1171. Aber das kann ja nicht

Da muss noch mehr stehen.

so hier noch mal die komplette fehlermeldung:


Warning: Cannot modify header information - headers already sent by (output started at /home/www/htdocs/modules/kürzel/meinmodul/controller/mein_controller.php:80) in /home/www/htdocs/core/oxutils.php on line 1171

Da musst du schauen: output started at /home/www/htdocs/modules/kürzel/meinmodul/controller/mein_controller.php:80
Kein schließendes PHP-Tag verwenden.

da ist kein schließender tag drin

liegt das vielleicht an dem echo $wert; ?
Muss ich das irgendwie anders wiedergeben?

Klar Ausgaben können nur im Template gemacht werden, z.B. im Template eine Funktion aus dem Controller aufrufen: [{ $oView->getWert() }]