PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr (https://www.php-resource.de/forum/)
-   HTML, JavaScript, AJAX, jQuery, CSS, Bootstrap, LESS (https://www.php-resource.de/forum/html-javascript-ajax-jquery-css-bootstrap-less/)
-   -   if wird nicht ausgewertet (AJAX) (https://www.php-resource.de/forum/html-javascript-ajax-jquery-css-bootstrap-less/78595-if-wird-nicht-ausgewertet-ajax.html)

joebar 28-11-2006 20:57

if wird nicht ausgewertet (AJAX)
 
Hallo,

ich habe hier ein AJAX Request und frage damit das Feld status in einer mysql datenbank ab. Wenn status up ist wird eine Lichtlaufleiste angezeigt, wenn der status down ist wird die Grafik gegen eine ausgeschlatete Lichtlaufleiste ausgetauscht.

Leider funktionier aber die if anweisung nicht, sobald ich die Variable request aus der Datenbank füttere. Wenn ich die Variable mit alert(request) überprüfe steht aber "up" oder "down" drin. Wenn ich die Variable mit request="up" setze funktioniert es, alert(request) zeigt genau den gleichen wert an. Was kann das sein? Hier ist der Codeteil der nicht funktioniert:

function updateImage() {
if (request.readyState == 4) {
var result = request.responseText;
alert(result); //<-hier wird "up" angezeigt
var bild_start = new Image();
var bild_stop = new Image();
bild_start.src="lauflinie.gif";
bild_stop.src="lauflinie_stop.gif";

if (result=="up") //<-trozdem wird die else schleife ausgeführt.
document.images[0].src = bild_start.src;
else
document.images[0].src = bild_stop.src;

}

asp2php 28-11-2006 22:53

schon mal an das Leerzeichen gedacht ;)

joebar 29-11-2006 14:37

Hmmm, hab ich mal mit alert(encodeURIComponent(result)) überprüft und tatsächlich liefert "request.responseText" folgenden String up%0A%0A%0A%0A%0A%0A

0A in Hex ist ein Linefeed, woher kommen denn diese Linefeeds ??????????
Ich schicke vom PHP Server zum Test lediglich "up" mit echo "up".

onemorenerd 29-11-2006 16:26

Was steht denn vor echo "up" in deinem PHP-Script?

joebar 29-11-2006 19:50

Hallo,

das php script sieht einfach so aus:

<?php
require_once 'mydb.php';
$db = new MyDb();

$sql = "SELECT status FROM gwpicfg WHERE id=" . $id;
if($result=$db->querySingleItem($sql))
echo $result;
?>

Zum testen hab ich echo $result einfach durch echo "up"; ersetzt, um sicher zu sein, dass die Zeichen nicht aus der Daenbank kommen.

Gruss
Gerd

onemorenerd 29-11-2006 21:42

"<?php" sind die ersten 5 Zeichen im Script?

joebar 29-11-2006 22:09

Ja genau, das ist die ganze Datei, sie dient nur dazu um das Feld Status in der db abzufragen und soll up oder down zurück geben.

onemorenerd 30-11-2006 00:40

Dann sind die Leerzeichen aus mydb.php. Oh Wunder. :rolleyes:

joebar 30-11-2006 07:20

Hallo,

die Datei bestehet jetzt nur noch aus:

<?php
echo $result;
?>

Trotzdem das selbe Ergebnis.
Das mus irgendwie mit dem AJAX Request und der Eigenschaft request.responseText zusammen hängen.

RanzigeMilch 30-11-2006 08:44

hi ich hatte bzw hab ein ähnliches problem.
bei mir übergibt der request einen umbruch vor dem text obwohl nirgends in der Datei oder der Datenbank ein Umbruch zu finden ist.
ich hab einfach ne needle mit übergeben und mir dann mit split(); die gewünschte information ausgelesen.
ist zwar son bissl geschwuchtelt, aber bis ich dahintergekommen bin wo denn da der fehler liegt funktionierts:)

joebar 01-12-2006 19:42

Ja, das ist genau das Problem, es sind 6 Umbrüche (Linefeeds) die der Request übergiebt, in einem Formular merkt man das nicht, wenn man die Ergebnisse aber auswerten möchte, ist das schon ziemlich störend, hat niemand eine Ahnung woher diese Umbrüche kommen?

asp2php 01-12-2006 22:18

hm ... das Phänomen ist mir noch nie passiert, vielleicht auch weil ich nicht mit PHP zu tun habe, aber warum ersetzt du nicht einfach die Steuerzeichen und erst dann vergleichen?

joebar 05-12-2006 12:12

Hallo,

ich hab das Problem gelöst indem ich nach jeder Antwort die letzten 6 Zeichen im String entferne und dann vergleiche. Aber interessieren tut es mich trozdem wo das herkommt. Naja, jedenfalls läufts jetzt.

Gruss
Gerd

onemorenerd 05-12-2006 12:16

Häng doch mal alle beteiligten Dateien hier rein (Attachment, nicht den Inhalt posten), dann schauen wir mal.

Slava 06-12-2006 02:55

ich glaube, dass er einfach nach dem
?> einfach 4 mal return gedruckt hat.
wenn er alles nach dem ?> löscht, dann wird es keine lehrzeichen mehr bei ausgabe geben.
und in schlimstem fall kann mann immer noch
result=decodeURIComponent(result);
result=result.replace(/^(\s*)(.*\S)(\s*)$/g,"$2");
machen


Alle Zeitangaben in WEZ +2. Es ist jetzt 17:20 Uhr.

Powered by vBulletin® Version 3.8.2 (Deutsch)
Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.0
[c] ebiz-consult GmbH & Co. KG