# JSon aus FireFox verschicken und empfangen.



## Magier (6. Jul 2018)

Hallo
ich arbeite zum ersten Mal mit JavaScrip und habe ein Problem. Ich möchte aus FireFox eine URL per JSon an einen Raspberry Pi schicken auf dem Node.js läuft.

Hier die Send-Funktion aus dem FireFox-Addon (FireFox Quantum 64.0 64-Bit unter Windows 7):


```
function sendJSon(str_url){
var xhr = new XMLHttpRequest();
var url = "192.168.1.102";
xhr.open("POST", url, true);
//console.log(str_url);
//console.log(JSON.stringify(new String(str_url)));
var data = JSON.stringify(new String(str_url));
xhr.send(data);
//console.log(data);
console.log("Ende");
}
```

(Die Variable str_url sollte ein String sein und die zu sendende Adresse enthalten).

Das Plugin wird sauber geladen und läuft auch durch. Nur bekomme ich am Ende einen Fehler:



> Ende
> XML-Verarbeitungsfehler: Kein Wurzel-Element gefunden
> Adresse: moz-extension://4ea9205b-f1b3-4f30-8894-88b795d73bff/popup/192.168.1.102
> Zeile Nr. 1, Spalte 1:



Ich bin mir nicht sicher woher dieser Fehler kommt. Ich könnte mir vorstellen das es an der Variable url liegt, die eine IP Adresse ist. In den Beispielen ist das immer richtige Domain Adresse aber hier in meinem privaten Netz wollte ich, gerade zum Entwickeln, keine Domains vergeben. Geht das nicht auch so?

Der Node Code sieht so aus.

```
var XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest;
var xhr = new XMLHttpRequest();
xhr.open('GET', '/', true);
// If specified, responseType must be empty string or "text"
xhr.responseType = 'text';
while (true) {
     xhr.onload = function () {
     if (xhr.readyState === xhr.DONE) {
         if (xhr.status === 200) {
         console.log(xhr.response);
         console.log(xhr.responseText);
      }
   }
};
}
xhr.send(null);
```

Die Node Version ist v8.11.3 und der Code ist aus einem Beispiel, um eine while() Dauerschleife erweitert. Ich will oder hoffe einfach nur das alles was empfangen wird in der Konsole landet. Ist erst mal nur zum lernen, testen und verstehen.

Hier gibt es keine Fehlermeldungen. Es wird einfach nichts angezeigt.

Könnte mir da jemand vielleicht weiterhelfen und mir erklären was ich falsch mache und wie man das zum laufen bring?

Schon mal herzlichen Dank

Magier


----------



## mrBrown (7. Jul 2018)

Magier hat gesagt.:


> Ich bin mir nicht sicher woher dieser Fehler kommt. Ich könnte mir vorstellen das es an der Variable url liegt, die eine IP Adresse ist. In den Beispielen ist das immer richtige Domain Adresse aber hier in meinem privaten Netz wollte ich, gerade zum Entwickeln, keine Domains vergeben. Geht das nicht auch so?


An der Variabel URL liegt's nicht. Ist aber in jedem Fall unüblich, einfach nur den String als JSON zu serialisieren (wenn auch möglich).

Mir fallen grad zwei mögliche Fehlerquellen ein: irgendwo ist XML als Contenttype angeben und es wird versucht es zu verarbeiten oder Same-Origin Policy macht da was kaputt.
Vermutlich ist es in beiden Fällen besser, die Fetch-API zu nutzen.




Magier hat gesagt.:


> Die Node Version ist v8.11.3 und der Code ist aus einem Beispiel, um eine while() Dauerschleife erweitert. Ich will oder hoffe einfach nur das alles was empfangen wird in der Konsole landet. Ist erst mal nur zum lernen, testen und verstehen.
> 
> Hier gibt es keine Fehlermeldungen. Es wird einfach nichts angezeigt.
> 
> Könnte mir da jemand vielleicht weiterhelfen und mir erklären was ich falsch mache und wie man das zum laufen bring?


Der "Node"-Code ist in jedem Fall völliger Unsinn.
Du startest auf dem Server einen GET-Request zu der URL '/' (also dem selben Server), setzt dann in einer endlos-Schleife die onload-Funktion neu, die vermutlich niemals was machen wird, weil der Status niemals 200 ist.

Wenn du Serverseitig auf Requests warten willst, solltest du ein passendes Framework wie z.B. express.js nutzen (und dich einmal ganz Grundlegen mit HTTP und Request/Response-Prinzip auseinander setzen)


----------



## Magier (9. Jul 2018)

Danke für den Hinweis...Nach etwas hin und her habe ich jetzt laufender Code.


```
function  sendJSon(str_In){
 
  var obj_temp = { "Send" :  str_In};  
  var request = new XMLHttpRequest();  
  var obj_data = JSON.stringify(obj_temp);
   
  request.open("POST", "http://192.168.1.102:3000/");
  request.setRequestHeader("Content-Type", "application/json");  
  /*request.onload = function()
  {
      alert("Response received: " + request.responseText);
  };*/  
  request.send(obj_data); 
}
```

Und der Tipp mit Express war wirklich gut, DANKE dafür. Es war zwar etwas gefrimel aber es funzt....

```
var express  = require("express");
var myParser = require("body-parser");
var multer   = require('multer'); // v1.0.5
var upload   = multer(); // for parsing multipart/form-data
var app      = express();

app.use(myParser.json()); // for parsing application/json
app.use(myParser.urlencoded({ extended: true })); // for parsing application/x-www-form-urlencoded
app.post("/", function(request, response) {
     
      obj_Re =  JSON.parse(JSON.stringify(request.body));
      console.log(obj_Re.Send);     
 });

app.listen(3000, function () {
  console.log('Example app listening on port 3000!');
});
```

Jetzt kann ich weiter bauen ;-) Also Danke.


----------

