Ich bekomme das JSON-RPC zeugs einfach nicht zum laufen…
Habe eine HTML Datei auf dem lokalen Windows 10 Rechner, wo auch ein IPS Test-System läuft. Dann eine Javascript Datei, welche in der HTML Datei eingebunden ist. Das ganze läuft nicht in einer HTML-Box, sondern in einer eigenständigen HTML-Datei zum Testen. Ich nutze Google Chrome als Browser.
Schaue ich mir in der Entwickler Konsole unter „Network“ den Verkehr an, so ist die Anfrage in der Konsole erfolgreich. Unter „Response“ kann ich dann auch die JSON Antwort einsehen, inklusive aller Variablen und deren Status. Jedoch bekomme ich auch einen Fehler in der Konsole und der Eventhandler für den readystatechange wird nicht aufgerufen. Dementsprechend kann ich die Daten auch nicht im Skript verarbeiten.
Failed to load http://localhost:3777/api/: No ‚Access-Control-Allow-Origin‘ header is present on the requested resource. Origin ‚null‘ is therefore not allowed access.
Sobald ich einen der beiden Header wieder dazunehme, ist der Status in der Entwicklerkonsole (failed) und ich bekomme im Log folgenden Fehler:
OPTIONS http://localhost:3777/api/ 0 ()
Javascript:
var SYMCON_IP = 'localhost';
var SYMCON_PORT = 3777;
var SYMCON_USER = 'username@mail.com';
var SYMCON_PASS = 'symcon';
window.onload = function() {
var json = createJsonMessage('IPS_GetSnapshot', [], 0);
sendData(json);
}
function sendData(json) {
SOCKET = new XMLHttpRequest();
SOCKET.onreadystatechange = function () {
if (this.readyState == 4 && this.status == 200) {
console.log('Response: ' + this.responseText);
}
}
SOCKET.open('POST', 'http://' + SYMCON_IP + ':' + SYMCON_PORT + '/api/', true);
//SOCKET.setRequestHeader('Content-type', 'application/json');
//SOCKET.setRequestHeader('Authorization', 'Basic ' + btoa(SYMCON_USER+':'+SYMCON_PASS));
console.log('Send JSON: ' + json);
SOCKET.send(json);
}
function createJsonMessage(command, parameter, id) {
data = {
'jsonrpc' : '2.0',
'id' : id,
'method' : command,
'params' : parameter,
}
return JSON.stringify(data);
}
Unter http://localhost:3777/api/ bekomme ich folgendes:
{„API“:„0.1“,„IP-Symcon“:„4.4“,„JSON-RPC“:„2.0“}