kostenloser Webspace werbefrei: lima-city


Problem/Frage bezüglich AJAX - PHP (POST)

lima-cityForumDie eigene HomepageHTML, CSS & Javascript

  1. Autor dieses Themas

    musketiere

    musketiere hat kostenlosen Webspace.

    Hallo zusammen,

    ich habe eine kleine, unterhaltsame (zumindest wird sie das noch) Web-Anwendung mit der Web Speech API (Speech Recognition und Speech Synthesis) geschrieben.

    Was sie machen soll:
    - per 'Speech Recognition' verstehen, was ihr der Anwender sagt und in Text verwandeln -funktioniert-
    - das gesagte per Ajax an den Server senden und Antwort des Servers zurücksenden (was notwendig ist, um den String auszuwerten, und durch eine Datenbank Konversationen bezüglich des zuletzt gesagten zu führen, usw.) -funktioniert nicht ganz-
    - Die Antwort des Servers per 'Speech Synthesis' sprechen -funktioniert-

    Mein genaues Problem ist jetzt, dass der Vorgang nur beim ersten Mal, beziehungsweise aller (ca.) 20 Sekunden durchgeführt wird...

    Wenn ich also 'Hallo' sage, wird das verstanden, zum Server geschickt, verarbeitet und es wird 'Willkommen' ausgesprochen.
    Wenn ich wenige Sekunden danach z.b.: 'Test' sage, wird das verstanden (!), zum Server geschickt (!), ist nicht "" (leer) oder empty oder !isset oder ähnliches ... nee ... ich weiß selbst nicht genau, was es ist...

    Meine Auswertung auf dem Server:

    <?php
    header('Content-Type: text/html; charset=utf-8');
    header('Cache-Control: must-revalidate, pre-check=0, no-store, no-cache, max-age=0, post-check=0');
    
    //Auswertung Beginn
    $final = strtolower($_POST['final']);
    
    switch ($final) {
    	case 'hallo':
    		$meldung = 'Willkommen';
    		break;
    
    	case 'test':
    		$meldung = '1 2 3';
    		break;
    
    	case '':
    		$meldung = 'Der übergebene String ist leer';
    		break;
    			
    	case (!isset($final)):
    		$meldung = 'Der übergebene String ist nicht gesetzt';
    		break;
    			
    	case (empty($final)):
    		$meldung = 'Der übergebene String ist empty';
    		break;
    	
    	default:
    		//$meldung = 'String stimmt mit nichts überein'; - Als ich das eingefügt hatte, traf das anstatt von 'Variable ist ein leerer String', siehe unten, zu. -
    		break;
    }
    
    switch ($meldung) {
    	case '':
    		$meldung = 'Variable Meldung ist ein leerer String'; //trifft ab 2. Mal zu!
    		break;
    
    	case (!isset($meldung)):
    		$meldung = 'Variable Meldung ist nicht gesetzt';
    		break;
    			
    	case (empty($meldung)):
    		$meldung = 'Variable Meldung String ist empty';
    		break;
    	
    	default:
    		# Nichts trifft zu
    		break;
    }
    
    echo $meldung;
    //Auswertung Ende
    
    ?>


    Der Rest funktioniert definitiv einwandfrei (Hab das ausgiebig getestet, etliche console.log's an allen möglichen Stellen gemacht und überall relevante Werte ausgeben lassen - es hängt an der Server-Auswertung, aber eben nur ab dem 2. Mal bzw. wenn ich innerhalb von 20-30 Sekunden wieder sende.)

    $final ist das Ergebnis der Spracherkennung und wird jedesmal korrekt (nicht leer oder so) übergeben (kann z. b. am Ende bei echo $meldung ausgegeben werden).
    Die Sprachausgabe klappt übrigens auch immer, wenn ich Ajax nicht verwende!
    Beispiele aus Ajax-Tutorials mit Formular-Vervollständigung klappen auch... Jedes Mal ^^

    Ich bin echt am Verzweifeln - ich konnte das Problem so weit eingrenzen (hoffe/glaube ich), hab aber keinen Plan, was genau das Problem ist :lol:
    Habt ihr eine Idee oder einen Vorschlag, wie ich das Problem lösen könnte? :confused:

    Danke schon mal! Vielmals! ;)
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Die Überprüfung auf
    !isset
    oder
    empty
    ergibt in der switch-case Anweisung nicht besonders viel Sinn. Du könntest auf "if, else if" umsteigen, dann funktioniert das.

    Aber diese Tests hast du vermutlich auch nur zum Debugging eingebaut. Wenn du wissen möchtest, welchen Wert eine Variable genau hat, dann hilft dir die Funktion
    var_dump()
    . Diese gibt dir den Typ und Inhalt einer Variablen aus.

    Teste damit mal
    $_POST['final']
    ,
    $final
    und
    $meldung
    durch, dann solltest du mehr wissen.
  4. Autor dieses Themas

    musketiere

    musketiere hat kostenlosen Webspace.

    Juhuuu :angel: :lol:

    Danke, danke, dankee!

    Es lag daran, dass anscheinend die Spracherkennungs-API eigenmächtig Leerzeichen vor den String gesetzt hat (komischerweise nicht vor den ersten...)

    Konnte ich ganz einfach mit trim() lösen

    $final = trim(strtolower($_POST['final']));


    Nochmals: Vielen Dank für die Hilfe - bin einfach nicht drauf gekommen ^^
  5. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!