AJAX POST an andere Domain (IP-Adreese)

flohaase

Mitglied
Hey Leute

Auf einem Microcontroller Board habe ich einen Webserver laufen. Über die IP 192.168.0.101 kann ich auf dieses zugreifen und ein paar LEDs an- und ausschalten. Jetzt ist es aber noch nötig, dass ich LEDs auf einem anderen Webserver schalte, die ich über die IP-Adressse 192.168.0.102 erreiche. Das ganze soll in JS bzw. AJAX geschrieben sein.

Hier mein Pseudo-Code:

if(button1 gedrückt) schalte LED1 auf 192.168.0.101
if(button2 gedrückt) schalte LED1 auf 192.168.0.102

In diesem Zusammenhang habe ich schon etwas für Cross Domain Policy gelesen, aber leider hilft mir das nicht sehr weiter.

Vielen Dank für eure Hilfe.
 
Wenn ich jetzt wüßte wie man mit Hilfe von Javascript, AJAX oder PHP Lampen ein- und ausschaltet, dann könnte ich dir vielleicht helfen!?

Kannst du es nicht in etwa so lösen

PHP:
if (isset($_POST["button1"])) header("Location: 192.168.0.101/licht_skript.php");
if (isset($_POST["button2"])) header("Location: 192.168.0.102/licht_skript.php");

In der Theorie sollte jetzt der entsprechende Server mit der Seite/Datei "licht_skript.php" aufgerufen werden.
 
Der Microcontroller ist in C programmiert und wartet auf die Befehle, die das Javascript ihm schickt. Mein Problem ist, das ich von einem Server Befehle an zwei verschiedenen IP Adresse etwas schicken muss. Es ist einfach, die LEDs auf dem Microcontroller zu schalten, auf dem der Server läuft. Aber ich schaffe es nicht, von diesem Server auf LEDs auf einem anderen Client zu schalten.

Dazu finde ich einiges unter dem Stichwort CORS (Cross-origin resource sharing).

Microcontroller 1 (Master) IP-Adresse 1:

- XMLHttpRequest auf diesem Server
- XMLHttpRequest auf den Slave mit erweiterten Header Information

Microcontroller 2 (Slave) IP-Adresse 2:
- wenn ein POST vom Master mit IP-Adresse 1 kommt, dann erlaube diesen

Code:
var paramURL = rootURL + '/?' + parameter;

var http = new XMLHttpRequest();
var serverActionMethod = "POST";

//Send the proper header information along with the request
http.open(serverActionMethod, paramURL, true);
http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

http.onreadystatechange = function() {//Call a function when the state changes.
if(http.readyState == 4 && http.status == 200) {
//run our callback
if(callback != undefined && typeof callback == 'function') callback(http.responseText);
}
}
http.send(parameter);


Danke, Gruß
 
Da der aufrufende Browser quasi dazu "genötigt" wird, die Webseite eines anderen Servers zu besuchen, sind für diesen Vorgang andere Sicherheitseinstellungen (Policies) nötig.

Ich hatte ein ähnliches Problem vor kurzer Zeit selber und habe mich dann dafür entschieden, ein simples Proxy-Skript auf dem Server zu nutzen, dass die Anfrage an den Slave schickt. Da ich nicht davon ausgehe, dass dein Mikrocontroller-Board auch noch Skript-Sprachen beherrscht, wird der Weg hier wahrscheinlich wegfallen.

Alternativ hatte ich in diesem Zusammenhang noch etwas von JSONP gelesen, was bei mir nicht funktionierte, da ich keinen Einfluss auf die Konfiguration des zweiten Servers hatte.

Hoffe, du kannst mit den paar Infos etwas anfangen.


Gruß,
Erik
 
Erzeuge mit JavaScript ein in-memory Formular (createElement('form')) und POSTe es in ein verstecktes iframe. Das ist der übliche weg, wenn man kein CORS einsetzen kann oder will und die Antwort vom Server eine nebensächliche Rolle spielt.

Falls das nicht klappt musst du mehr Infos geben was der Controller für Requests erwartet.
 

Neue Beiträge

Zurück