Willkommen › Foren › LogoControl › aus Website LogoControl-Befehle aufrufen
Verschlagwortet: XMLHttpRequest
- Dieses Thema hat 7 Antworten sowie 2 Stimmen und wurde zuletzt vor vor 8 Jahren, 4 Monaten von admin aktualisiert.
-
AutorBeiträge
-
26. Juni 2016 um 19:30 #2978raschnerTeilnehmer
wie kann ich aus einer Website, die auf dem selben Pi läuft wie LogoControl,
z.B. in javascript eine Methode aus LogoControl aufrufen oder einen Zustand einer Variablen
anzeigen
Ein Versuch mit XMLHttpRequest bringt leider keinen Erfolg//Bsp.:https://wwkw.selfhost.eu:8080/rest/devices/3/methods/2
var x = new XMLHttpRequest();
x.open(„GET“,url,false);
alert(„in setLControl nach x.open“);
x.send();
alert(„in setLControl nach x.open:“+x);
var str=x.responseText;
alert(„in setLControl:“+str);
return str;
}28. Juni 2016 um 11:27 #2979adminAdministratorAlso in der LogoControl-WebGUI mache ich ja auch AJAX-Calls um Methoden aufzurufen oder Attribute zu setzen, allerdings mach ich das nicht per Hand mit XMLHttpRequest sondern mit jQuery, weil’s deutlich einfacher ist:
// call method function callDeviceMethod(deviceId, methodId) { jQuery.get('rest/devices/' + deviceId + '/methods/' + methodId); } // set attribute function setDeviceAttribute(deviceId, attributeId, attributeName, currentValue) { var newValue = prompt("Attributwert \"" + attributeName + "\" ändern:", currentValue); if (newValue != null) { jQuery.get('rest/devices/' + deviceId + '/attributes/' + attributeId + '/valueText?set=' + newValue); } }
Kannst dir ja mal den Seitenquelltext von der LogoControl-Haupseite anschauen. Die URL die du versuchst aufzurufen scheint auch richtig zu sein. Lass mich raten: wenn du die URL im Browser von Hand aufrufst funktioniert es, nur eben nicht per AJAX? Dann könnte der folgende Artikel hilfreich sein, da du vermutlich auf dem Pi deinen eigenen Webserver laufen hast, welcher unter einem anderen Port läuft als der LogoControl-Webservice:
29. Juni 2016 um 21:54 #2980raschnerTeilnehmerDanke für die Unterstützung, daran wird es wohl liegen, da ein href Aufruf im Browser fkt.
nicht jedoch in einer js-function.Werde versuchen das hinzukriegen – nochmals Danke
1. Juli 2016 um 10:17 #2985adminAdministratorOkay, hab mich die Tage jetzt auch noch mal ausführlicher mit der Same-Origin-Policy beschäftigt. Das Problem auf deiner Seite zu lösen ist eher schwierig. Die bevorzugte Lösung für diese „Sicherheitsrichtlinie“ nennt sich Cross-Origin Resource Sharing welche mittlerweile von den meisten Browsern unterstützt wird. Damit lassen sich per XMLHttpRequest auch fremde Ressourcen laden. Bedingung: der Server muss ausdrücklich mitteilen, dass seine Ressourcen in einem XMLHttpRequest eines fremden Clients angefordert werden dürfen. Er tut dies indem er folgenden HTTP-Header in der Response setzt:
Access-Control-Allow-Origin: *Da dies wie gesagt vom Server (also in unserem Fall von LogoControl) gesetzt werden muss, hab ich mal eine Testversion von LogoControl erstellt, die diesen HTTP-Header sendet:
LogoControl.exe (mit CORS-Header)Teste bitte mal, ob das dein Problem behebt. Falls ja (wovon ich ausgehe), werde ich ein neues Release von LogoControl veröffentlichen.
1. Juli 2016 um 22:28 #2986raschnerTeilnehmerHallo
habe LogoControl.exe umbenannt und deine exe mit CORS Header ins Verzeichnis LogoControl
kopiert; dabei gibt es Fehlermeldungen und ständigen restart, muss ich ev. noch was zusaetzlich machen?
Mit cgi-Programmierung müsste das Problem auch zu lösen sein ?hier /tmp/LogoControl.log:
01.07.2016 22:20:27: Fehler beim Laden der config.xml: Invalid start element: :logo
System.Xml.Schema.XmlSchemaValidationException: Invalid start element: :logo
at System.Xml.XmlReaderSettings.OnValidationError (System.Object o, System.Xml.Schema.ValidationEventArgs e) [0x00000] in <filename unknown>:0
at Mono.Xml.Schema.XmlSchemaValidatingReader+<XmlSchemaValidatingReader>c__AnonStorey0.<>m__1 (System.Object o, System.Xml.Schema.ValidationEventArgs e) [0x00000] in <filename unknown>:0
at System.Xml.Schema.XmlSchemaValidator.HandleError (System.Xml.Schema.XmlSchemaValidationException exception, Boolean isWarning) [0x00000] in <filename unknown>:0
at System.Xml.Schema.XmlSchemaValidator.HandleError (System.String message, System.Exception innerException, Boolean isWarning) [0x00000] in <filename unknown>:0
at System.Xml.Schema.XmlSchemaValidator.HandleError (System.String message) [0x00000] in <filename unknown>:0
at System.Xml.Schema.XmlSchemaValidator.ValidateStartElementParticle (System.String localName, System.String ns) [0x00000] in <filename unknown>:0
at System.Xml.Schema.XmlSchemaValidator.AssessOpenStartElementSchemaValidity (System.String localName, System.String ns) [0x00000] in <filename unknown>:0
at System.Xml.Schema.XmlSchemaValidator.ValidateElement (System.String localName, System.String namespaceUri, System.Xml.Schema.XmlSchemaInfo schemaInfo, System.String xsiType, System.String xsiNil, System.String xsiSchemaLocation, System.String xsiNoNamespaceSchemaLocation) [0x00000] in <filename unknown>:0
at Mono.Xml.Schema.XmlSchemaValidatingReader.Read () [0x00000] in <filename unknown>:0
at System.Xml.XmlDocument.Validate (System.Xml.Schema.ValidationEventHandler handler, System.Xml.XmlNode node, XmlSchemaValidationFlags flags) [0x00000] in <filename unknown>:0
at System.Xml.XmlDocument.Validate (System.Xml.Schema.ValidationEventHandler validationEventHandler) [0x00000] in <filename unknown>:0
at LogoControl.DataModel.Configuration.ValidateXml (System.Xml.XmlDocument xdoc) [0x00000] in <filename unknown>:0
at LogoControl.DataModel.Configuration.LoadFromXmlString (System.String xmlString) [0x00000] in <filename unknown>:0
at LogoControl.Controller.Start () [0x00000] in <filename unknown>:0
(no inner exception)
01.07.2016 22:20:29: Fehler beim Laden der config.xml: Invalid start element: :logo
System.Xml.Schema.XmlSchemaValidationException: Invalid start element: :logo2. Juli 2016 um 0:45 #2987adminAdministratorOh, dann verwendest du noch eine alte Version von LogoControl mit dem alten Format der config.xml. Die Version mit den CORS Headern basiert auf der 0.5.x Reihe, bei welcher du eine neue config benötigst (siehe Migrationsanleitung im Download Bereich). Sprich: erst musst du vollständig updaten auf 0.5.2 und dann die CORS Exe verwenden.
6. Juli 2016 um 23:04 #3005raschnerTeilnehmerklappt einfach nicht, exakt den selben url im browser liefert brav true ab
aber aus der Website immer status 0Website zusammengebastelt:
<!DOCTYPE html>
<html>
<body><div id=“tor0″></div>
<div id=“tor1″ style=“width: 100px; float:left“>Falle1</div><script>
function setLControl(url,elem_no) {
alert(„in setLControl:“+url);
console.log(‚Entry setLControl‘, url);
//Bsp.:https://wwkw.selfhost.eu:8080/rest/devices/3/methods/2
var x = new XMLHttpRequest();
console.log(‚UNSENT‘, x.status);
x.open(„GET“,url,true);
//alert(„in setLControl nach x.open“+x.readyState+“ Status:“+x.status);
console.log(‚OPENED‘, x.status);
x.onprogress = function () {
//alert(„in setLControl nach x.open“+x.readyState+“ Status:“+x.status);
console.log(‚ONPROGRESS=LOADING‘, x.status);
};
x.onload = function () {
//alert(„in setLControl nach x.onload“+x.readyState+“ Status:“+x.status);
console.log(‚ONLOAD=DONE‘, x.status);
};
x.send();
var str=x.responseText;
alert(„in setLControl:“+str);
document.getElementById(„tor1″).innerHTML = str;
return str;
}</script>
</body>
<div id =“tblist1″>
<button type=“button“ onclick=“setLControl(‚https://88:88@wwkw.selfhost.eu:8080/rest/devices/1/methods/2‘,1)“ style=“position: absolute; left: 0px; top:270px“>LC</button>
</div>
</html>8. Juli 2016 um 8:28 #3006adminAdministratorHab mal etwas herum probiert: So wie es aussieht funktioniert das nur solange keine Benutzeranmeldung erforderlich ist, also beim LogoControl HTTP service und nicht beim HTTPS. Die Art wie der Browser die HTTP Basic Authentication durchführt ist in Kombination mit dem CORS-Header wohl ein Problem. Ich schau mal ob ich eine Lösung finde…
-
AutorBeiträge
- Du musst angemeldet sein, um zu diesem Thema eine Antwort verfassen zu können.