Problem/Frage bezüglich AJAX - PHP (POST)
lima-city → Forum → Die eigene Homepage → HTML, CSS & Javascript
antwort
auswertung
break
code
dank
final code
final meldung
gesetzt break
header
leerer string
meldung
problem
sekunde
server
string
switch
test
text
variable meldung
weben
-
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
Habt ihr eine Idee oder einen Vorschlag, wie ich das Problem lösen könnte?
Danke schon mal! Vielmals! ;) -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Die Überprüfung auf
oder!isset
ergibt in der switch-case Anweisung nicht besonders viel Sinn. Du könntest auf "if, else if" umsteigen, dann funktioniert das.empty
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
. Diese gibt dir den Typ und Inhalt einer Variablen aus.var_dump()
Teste damit mal
,$_POST['final']
und$final
durch, dann solltest du mehr wissen.$meldung
-
Juhuuu
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 ^^ -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage