Problem mit Sajax

Hi,

da ich ja schon länger nach einer Lösung mit Ajax für meine Webseiten suche habe ich jetzt einen 1. Erfolg mit Sajax :slight_smile:
Es funktioniert auch soweit nur kommen im Kernel lauter Fehlermeldungen :confused:

Das ganze funktioniert folgerndermaßen:

Ich habe ein Script für z.B. einen Fühlerwert

<?
require("Sajax.php");
sajax_init(); 
sajax_export("update");
sajax_handle_client_request(); 

function update() {
$var = GetValueFloat("Zulufttemp._alt");
$value = sprintf("%2.1f",$var)." °C";
$ret = "document.getElementById('Wert').innerHTML='{$value}'";
return $ret;
} 
?>
<html>
<head>
<link rel="stylesheet" href="css\werte.css" type="text/css">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script language="javascript">
<? sajax_show_javascript(); ?>
function refreshTimer(t) {
setTimeout("update()",t*1000); 
}
function update() {
x_update(update_cb); 
}
function update_cb(result) {
eval(result);
refreshTimer(2);
}
</script>
</head>
<body onload="refreshTimer(2);">
<a href="Webgraphen/chartautogen.php?fselect=Zul_Temp_Lfg" title="Zulufttemperatur" target="haupt"><font size=1><div align="center" id="Wert" >Zulufttemperatur</div></font></a>
</body>
</html>

Dieses Script rufe ich aus der eigentlichen Seite wo der Wert dargestellt werden soll auf und wird mir dann in einem Iframe alle 2 sek. angezeigt.

Das funktioniert soweit :slight_smile:

Im Kernel-Fenster und im Log bekomme ich aber folgende Fehlermeldungen:

23.06.2007 17:19:48.687 | DEBUG | ExecuteThread ID: 3480 | Executing Script: wetter_windrichtung.php ~ Sender: WebInterface
23.06.2007 17:19:48.750 | ERROR | ExecuteThread ID: 3480 | ScriptError: wetter_windrichtung.php ~ Sender: WebInterface ~ Result: +:var res = ‚document.getElementById(‚Wert‘).innerHTML=‚270 °‘‘; res;
23.06.2007 17:19:48.750 | DEBUG | ExecuteThread ID: 3480 | Executed, Ret: 0, Successful:False

Ist es möglich das der IPS Webserver mit den Befehlen nichts anfangen kann oder habe ich irgendwo einen Fehler gemacht :confused:

Danke schonmal für eure Hilfe.

Grüße
Thomas

Hallo Thomas,

Du hast mit Sicherheit irgendwo einen Programmierfehler drin. Ich verwende beim heating Modul auch Sajax und das laeuft ohne Probleme. Du musst also mal auf die Fehlersuche gehen.

Gruss Torro

Hi Torro,

das komische ist ja das alles funktioniert aber trotzdem diese Meldung kommt. Das einzigste was ich gefunden habe ist in der Sajax.php die Funktion die diesen Text ausgibt, diese wird mit exit verlassen. Wenn ich das durch return (soll ja Probleme machen) ersetze geht gar nichts mehr :frowning:

Steh etwas auf dem Schlauch.

Dein WIIPS hilft mir da nicht wirklich weiter da zu komplex und ich nix PHP Profi :wink:

Gruß
Thomas

Hallo zusammen,

ich kämpfe immer noch mit diesem Problem und finde keine Lösung :frowning:
Ziel der Aktion ist folgendes:

Werte (z.B. Fühlerwerte) sollen auf der Webseite aktualisiert werden ohne das jedes mal die ganze Seite refresht wird (also neu aufgebaut wird).
Das ganze funktioniert wie gesagt auch, aber im Kernel kommt bei jedem aktualisieren eines Wertes eine Fehlermeldung wie weiter oben in einem Beitrag geschrieben.

Ich habe im Anhang mal die sajax.php sowie eine PHP-Datei die einen Wert (hier Aussentemp.) aktualisiert angehängt. Vielleicht hat jemand der sich damit auskennt Zeit und Muse sich damit zu beschäftigen :rolleyes:

Hier der Aufruf aus der Webseite der die „wetter_aussentemp.php“ aufruft und den Wert anzeigt:

<iframe src="wetter_aussentemp.php"  style="border:0px #FFFFFF none;" name="Frame4" scrolling="no" frameborder="0" align=aus marginheight="0px" marginwidth="0px" height="14" width="45"></iframe>

Besten Dank.

Gruß
Thomas

sajax.rar (3.73 KB)

Hier die geänderte Sajax.php Datei, wie ich sie fürs WIIPS modifiziert habe.

Folgendes musst du bei den Request verändern:


if(sajax_handle_client_request()) {
 return;
 } // Script ohne exit abbrechen!

... und später

<? //echo hinzugefügt
echo sajax_show_javascript();
?>

Grüße, paresy

Sajax.rar (2.89 KB)

Hallo Paresy,

danke für die schnelle Hilfe aber leider kommen jetzt keine Werte mehr (aber auch keine Fehlermeldung) :confused:

Hier kannst du mal gucken: www.online-bhkw.de

Ich bekomme jetzt im Browser eine Fehlermeldung (Objekt erwartet).

Thanks.

Gruß
Thomas

Hier geht es. http://www.atr-computer.dyndns.org/wetter_aussentemp.php

4,1°C

paresy

Hi Paresy,

klar gehts wieder, ich habe die alte sajax.php wieder aktiviert (kann sonst nichts ansehen ist ja mein laufendes System :wink: ).
Sobald ich den Link im Forum anklicke bekomme ich wieder eine Fehlermeldung im Kernel von meinem IPS :o

Wenn du was testen möchtest, müsste ich dir das in einem extra WEB-Verzeichnis einrichten. Gib einfach bescheid.

Gruß
Thomas

OK. Torro hat gesagt, dass der Fix oben noch nicht ganz so klappt. Ich gucke mir das mal Morgen Abend genauer an.

paresy

super, danke euch beiden :wink:
Wenn sich zwei PHP Freaks damit beschäftigen, habe ich keine Bedenken das da ein positives Ergebnis heraus kommt :):slight_smile:

Ich blicke das ehrlich gesagt nicht richtig mit dem ganzen Ajax Zeug :frowning:

Grüße
Thomas


<? //echo hinzugefügt
echo sajax_show_javascript();
?>

Wenn du das noch so veränderst, dann geht alles.

paresy

Hallo Paresy,

leider nicht :frowning: Hat sich nichts geändert. Mit der von dir modifizierten sajax.php geht gar nichts und mit der Originalen kommt die Fehlermeldung weiterhin.

Gruß
Thomas

Hallo MSR_Junky,

ich stehe noch ziemlich am Anfang und habe es jetzt ähnlich wie Du gemacht, um einen Wert mit Sajax zu aktualisieren. Die Fehlermeldungen die Du oben geschildert hast hatte ich zuerst auch, konnte sie aber anhand der Tipps hier abstellen.

Nun zu meiner Frage: Kannst Du mir einen Tipp geben wie ich weitere Werte aktualisieren kann? Muss ich für jeden Wert das Script noch einmal einbinden oder gibt es eine andere Möglichkeit?

Etwas habe ich schon rumprobiert, bekomme es aber im moment nur für einen Wert hin.

Vielen Dank im voraus, Gruß Marc !

Hallo Marc,

ich erstelle für jeden Wert den ich in der Webseite anzeige (mit einem iframe) dieses Script . Was besseres ist mir leider bisher nicht eingefallen.
Wenn du eine bessere Lösung hast, wäre ich da sehr dran interessiert :wink:

Grüße
Thomas

Da mich spontan interessiert hat mit wie wenig JavaScript sich das Problem lösen lässt, hier meine Lösung für eine eigene Seite im V2 WebFront. Bin mit meiner einen Zeile JS-Code recht zufrieden :).
Da es nur einen IPS-spezifischen Befehl gibt sollte sich das auch für die V1 sehr schnell anpassen lassen. Beide Dateien gehören ins Verzeichnis /webfront/user. Die getIPSValue.php ist jetzt nur ein Beispiel. Es kann jede andere URL auf dem Host angegeben werden. Fremde URLs werden höchstwahrscheinlich vom Browser als Schutz vor Cross-Site-Scripting geblockt, aber da lässt sich ein PHP-Proxy-Skript über file_get_contents schreiben.

page.php:

<!--
<!DOCTYPE html
    PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-->

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Cache-Control" content="no-store, no-cache, must-revalidate">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="0">

<style type="text/css">@import "default.css";</style>

<script type="text/javascript" src="../dojo-release-1.3.0/dojo/dojo.js" djConfig=""></script>

<script type="text/javascript">
    var refreshPeriodically = function (node, url, interval) { dojo.addOnLoad( function () { var req = function () { dojo.xhrGet( { url: url, node: dojo.byId(node), load: function (data, xhr) { if (xhr.args.node) { xhr.args.node.innerHTML = data; } } } ); }; req(); window.setInterval(req, interval); }); };
    
    refreshPeriodically("text1", "getIPSValue.php?id=40163", 10000);
    refreshPeriodically("text2", "getIPSValue.php?id=45930", 3000);
</script>

</head><body>

<span id="text1"></span><br />
<span id="text2"></span><br />

</body></html>

getIPSValue.php:

<?php
    header("Last-Modified: ".gmdate("D, d M Y H:i:s", time())." GMT");
    header("Pragma: no-cache");
    header("Expires: 0");
    header("Cache-Control: no-store, no-cache, must-revalidate");
    header("Cache-Control: pre-check=0, post-check=0, max-age=0");

    echo GetValue((int)$_GET['id']);
?>

Hallo Horst,

deine Lösung ist ja klasse :slight_smile:

Im Firefox funzt das auch super, nur im IE ( 7 und 8 getestet) werden die Werte nicht aktualisiert :confused:

Hast du da ne Idee?

Grüße
Thomas

Hallo MSR_Junky,
hallo Horst,

kann ich bestätigen.

Des Weiteren habe ich noch ein Formatierungsproblem.

Habe es in meiner userdefinierten gerade mal so eingehackt.

<div class="deviceStateContent"><div id="ErtragGesamt"></div> kWh</div>

leider erscheint das kWh in einem Zeilenumbruch (siehe Anhang). Ist mit Sicherheit für einen CSS-Spezialisten kein Problem :rolleyes:

Vielleicht hat jemand einen schnellen Tipp für mich wie das mit dem formatieren klappen könnte. Das Prob mit dem IE ist jetzt nicht ganz so dramatisch.

Hi Werner,

sitze gerade am gleichen Problem.
Die Einheit wird richtig dargestellt, wenn man das Script „getIPSValue.php“ so ändert:


<?php
    echo GetValue((int)$_GET['id'])." ºC";
?>
 

Hier wäre es jetzt schön wenn man die Einheit gleich beim Aufruf mit übergeben könnte.
Ich meine hier als Beispiel:


refreshPeriodically("value1", "getIPSValue.php?id=36070", 1000, "unit");


var refreshPeriodically = function (node, url, interval, unit)

Ich habe es schon versucht, aber Java ist nicht meine Welt :o

Vielleicht hat jemand ne Idee?

Gruß
Thomas

Der IE hat die Werte gecached. Wenn man die getIPSValue.php extern aufgerufen hat wurde auch brav die Seite über JavaScript aktualisiert. Ist halt mal wieder die IE…

Ein div ist standardmäßig ein Block-Element. Wenn man <span id=„bla“></span> benutzt gibt es keinen Umbruch. Ansonsten bliebe noch übrig das div mit einer eigenen CSS-Klasse auszustatten.

Hi,

wenn ihr die getIPSValue.php so ändert, funzt es auch mit dem IE.

<?php
  // Datum aus Vergangenheit
header("Expires: Mon, 12 Jul 1995 05:00:00 GMT");
// Immer geändert
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
// Speziell für MSIE 5
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
 ?>

<? 
    echo GetValue((int)$_GET['id']);
?> 

Gruß
Thomas