Hauptmenü

jsonP - Request

Begonnen von tiptronic, 09 Januar 2012, 11:54:05

Vorheriges Thema - Nächstes Thema

tiptronic

                                                 

Wie hast Du das denn ausprobiert? Ich bekomme bereits bei der Antwort vom Server eine DOM-Exception, so dass ich gar nicht mehr dazu komme das Ergebnis zu verwerten. Ich sehe zwar, dass die korrekten Daten ankommen, komme aber an die nicht dran, weil die DOM-Exception meine Programmfluss unterbricht.

Kannst Du das mal mit einem Stückchen HTML und Javascript ausprobieren - und mir sagen was ich machen muß, damit das bei mir auch geht? ;-)

Grüße

andy

Am 14.01.2012 um 21:05 schrieb Rudolf Koenig:

>> Du hast es nicht ausprobiert, stimmts? ;-)
>
> Stimmts. Es sollte auch:
>  eval('result='+arg);
> heissen. Damit geht es. Ausprobiert :)
>
> --
> To unsubscribe from this group, send email to
> fhem-users+unsubscribe@googlegroups.com

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

rudolfkoenig

                                                   

> Kannst Du das mal mit einem Stückchen HTML und Javascript ausprobieren - und
> mir sagen was ich machen muß, damit das bei mir auch geht? ;-)

Wie das im Wiki vorgeschlagen wurde:

test.html:
=======

 
    Test
   
   
 
 
    Test1.
 

=======

Aufruf:
  http://webserver/test.html

fhemhost != webserver

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

tiptronic

                                                 

Geht nicht - auf keinem meiner Browser. Ich erhalte:


Firefox:
----------

unterminated string literal
   
MyFunc('{
fhem?c...=MyFunc (Zeile 1, Spalte 7)


Safari:
---------
MyFunc('{
fhem:1SyntaxError: Unexpected EOF


Google Chrome:
-----------------------
Uncaught SyntaxError: Unexpected token ILLEGAL

:-(

Alles MacOSX latest rev.

Vielleicht hast Du an Deinen Rechnern die Rechte verdreht?




Gruß

Andy




Am 14.01.2012 um 22:44 schrieb Rudolf Koenig:

>> Kannst Du das mal mit einem Stückchen HTML und Javascript ausprobieren - und
>> mir sagen was ich machen muß, damit das bei mir auch geht? ;-)
>
> Wie das im Wiki vorgeschlagen wurde:
>
> test.html:
> =======
>
>  
>    Test
>    
>    
>  
>  
>    Test1.
>  
>
> =======
>
> Aufruf:
>  http://webserver/test.html
>
> fhemhost != webserver
>
> --
> To unsubscribe from this group, send email to
> fhem-users+unsubscribe@googlegroups.com

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

rudolfkoenig

                                                   

> Vielleicht hast Du an Deinen Rechnern die Rechte verdreht?

Nichts dergleichen. Die Meldung deutet darauf hin, dass das schliessende '
fehlt, vermutlich hast Du sie bei deinem Experiment vergessen.  Es sollte so
ausschauen:
      $FW_cmdret =~ s/'/\\'/g;
      FW_pO "$FW_jsonp('$FW_cmdret');";
Oder in Deinem fhem.cfg sind Sonderzeichen, die in jsonlist nicht geschuetzt
sind. Kannst Du dein Experiment auch mit einem minimalen fhem.cfg versuchen?

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

tiptronic

                                                 

>> Vielleicht hast Du an Deinen Rechnern die Rechte verdreht?
>
> Nichts dergleichen. Die Meldung deutet darauf hin, dass das schliessende '
> fehlt, vermutlich hast Du sie bei deinem Experiment vergessen.  Es sollte so
> ausschauen:
>      $FW_cmdret =~ s/'/\\'/g;
>      FW_pO "$FW_jsonp('$FW_cmdret');";

Nein - ich hab' für die Tests die Original fhem verwendet (ohne irgendwelche Modifikationen).
Mit meiner Variante
    FW_pO "$FW_jsonp($FW_cmdret);";
tritt das Problem ja nicht auf (zumindest bei der jsonlist).

> Oder in Deinem fhem.cfg sind Sonderzeichen, die in jsonlist nicht geschuetzt
> sind. Kannst Du dein Experiment auch mit einem minimalen fhem.cfg versuchen?


OK - ich hab dasselbe mal (Original-fhem) mit folgender cfg gemacht - ohne Änderung der Ergebnisse. Auf allen Browsern gibt's Exceptions.


attr global modpath /usr/share/fhem
attr global nofork 1
attr global port 7072 global
attr global statefile /var/log/fhem/fhem.save
attr global verbose 3

define CUNO CUL 192.168.x.y:2323 1234

define WEB FHEMWEB 8083 global


Was für einen Browser verwendest Du denn? Und hast Du's mal mit einem anderen versucht?

Vielleicht wäre es doch einfacher das so zu machen, wie ich es vorgeschlagen habe ;-)

Danke für Deine Mühe

Andy

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

Guest

Originally posted by: <email address deleted>

On 15 Jan., 02:34, Andy Fuchs wrote:> Geht nicht
- auf keinem meiner Browser. Ich erhalte:> > Firefox:> ----------> >
unterminated string literal
Da sind "zuviele" Zeilenumbrüche drin. Im Result des jsonp darf kein
Zeilenumbruch drin sein. Meine "myJSONPCallback" würde dann so
aussehen und x enthält dann das passende Object/Array. ("eval" is
"evil", nur nutzen, wenns der Browser nicht unterstützt, z.B. ie<=7)

function myJSONPCallback(s){  var x = JSON.parse(s);
  ...}

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

Guest

Originally posted by: <email address deleted>

Die Formatierung ist ja echt grottig, sorry. Gibt's hier Tags, die man
nutzen kann ???

...Alex

On 16 Jan., 21:53, Alexander Brickwedde wrote:
> On 15 Jan., 02:34, Andy Fuchs wrote:> Geht nicht
> - auf keinem meiner Browser. Ich erhalte:> > Firefox:> ----------> >
> unterminated string literal
> Da sind "zuviele" Zeilenumbrüche drin. Im Result desjsonpdarf kein
> Zeilenumbruch drin sein. Meine "myJSONPCallback" würde dann so
> aussehen und x enthält dann das passende Object/Array. ("eval" is
> "evil", nur nutzen, wenns der Browser nicht unterstützt, z.B. ie<=7)
>
> function myJSONPCallback(s){  var x = JSON.parse(s);
>   ...}

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

tiptronic

                                                 

Am 16.01.2012 um 21:53 schrieb Alexander Brickwedde:

> On 15 Jan., 02:34, Andy Fuchs wrote:> Geht nicht
> - auf keinem meiner Browser. Ich erhalte:> > Firefox:> ----------> >
> unterminated string literal
> Da sind "zuviele" Zeilenumbrüche drin. Im Result des jsonp darf kein
> Zeilenumbruch drin sein.

Deshalb ist's ja meiner Ansicht nach besser gleich alles als JSON zurückzugeben.
a) Sparst Du Dir damit das parsen im UI
b) Können da beliebig viele Returns drin sein (weil diese ja nicht als solche interpretiert werden)
c) Funktioniert das ganze dann auch ohne Umschweife mit den gängigen Javascript-Bibliotheken wie jQuery, Prototype, DoJo, etc...

Andy


> Meine "myJSONPCallback" würde dann so
> aussehen und x enthält dann das passende Object/Array. ("eval" is
> "evil", nur nutzen, wenns der Browser nicht unterstützt, z.B. ie<=7)
>
> function myJSONPCallback(s){  var x = JSON.parse(s);
>  ...}
>
> --
> To unsubscribe from this group, send email to
> fhem-users+unsubscribe@googlegroups.com

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

Guest

Originally posted by: <email address deleted>

> Deshalb ist's ja meiner Ansicht nach besser gleich alles als JSON
> zurückzugeben.
> a) Sparst Du Dir damit das parsen im UI
> b) Können da beliebig viele Returns drin sein (weil diese ja nicht als
> solche interpretiert werden)
> c) Funktioniert das ganze dann auch ohne Umschweife mit den gängigen
> Javascript-Bibliotheken wie jQuery, Prototype, DoJo, etc...
>
> Andy
>
Lange keine Antwort hier aber ich denke hier passts am besten rein.
Ich bin gerade dabei mir ein kleines Interface zu basteln und stand vor dem
Problem das ein normaler XMLHttpRequest per "jsonlist&XHR=1" nur vom selben
server möglich ist.
Per JSONP hab ich die Daten wegen der Zeilenumbrüche in der Datei aber auch
nicht geladen bekommen.
Ich habe daher die 01_FHEMWEB.pl so geändert das ein anhägen von "CORS=1",
durch setzen eines Headers, das Cross-origin resource sharing freigibt.

Ich hänge meine 01_FHEMWEB.pl mal hier an falls irgendwer das nochmal
benötigt.
(Änderungen in Zeile 91, 279-282, 614, 639)

Gruß
Gerrit

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

rudolfkoenig

                                                   

> Ich habe daher die 01_FHEMWEB.pl so geändert das ein anhägen von "CORS=1",
> durch setzen eines Headers, das Cross-origin resource sharing freigibt.

Hab die Aenderungen uebernommen und eingecheckt. Bitte das naechste mal den
Output von diff -u (oder einen anderen patch-faehigen diff) posten.

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

Guest

Originally posted by: <email address deleted>

Danke sehr, nachdem ich gestern ein bisschen weitergebastelt hab viel mir
auf das jedoch weitere Header benötigt werden wenn das Webinterface über
Basic Auth geschützt ist.
Anbei auch noch ein diff für das EnOcean Funksendemodul FSM61 von Eltako um
wie beim FSB61 den released als state anzuzeigen falls an keinem der beiden
eingänge eine spannung anliegt.

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

Guest

Originally posted by: <email address deleted>

Ich hab die 01_FHEMWEB.pl nochmal überarbeitet um CORS auch bei aktiviertem
basic auth benutzen zu können.
Außerdem noch ein Patch für das Eltako FSM61 EnOcean Modul um released als
Status zuzulassen.

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

Guest

Originally posted by: <email address deleted>

Anmerkung zur 01_FHEMWEB.diff
Mir ist gerade aufgefallen das dort noch etwas geändert werden müsste,
undzwar wird ein OPTIONS request nun zwar wie vorgesehen auch
ohne Authorization Header entgegengenommen allerdings auch bearbeitet.
Dies hat zur Folge das wenn ich z.B. einen lichtschalter toggle das licht
nach dem OPTIONS request kurz an aber dann sofort beim folgendem GET
request wieder aus geht.

Ideal wäre es wenn auf einen OPTIONS request nur mit

HTTP/1.1 200 OK
Access-Control-Allow-Origin: ANFRAGEADRESSE
Access-Control-Allow-Methods: GET, POST, OPTIONS
Access-Control-Allow-Headers: Origin, Authorization, Accept
Access-Control-Allow-Credentials: true
Access-Control-Max-Age:86400
Content-Length: 0


antwortet und keine befehle an FHEM gesendet werden.

Deswegen anbei nochmal ein diff gegen die aktuelle SVN version, der obrige
hat sich dann erledigt.

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

rudolfkoenig

                                                   

Hab beide diffs (EnOcean FSB61) + FHEMWEB Cors fix) nach kurzes Testen eingecheckt.
FSB61 habe ich in der commandref.html noch erwaehnt.

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

rudolfkoenig

                                                   

> Hab beide diffs (EnOcean FSB61) + FHEMWEB Cors fix) nach kurzes Testen eingecheckt.
> FSB61 habe ich in der commandref.html noch erwaehnt.

Bin gerade ueber das CORS handling gestolpert, und ich finde, dass ein
CORS Flag (Cross-Origin-Resource-Sharing) gehoert nicht zum Aufruf-URL
sondern als FHEMWEB Attribut. Veto?
Weiterhin steht in diesem Fall im header, dass FHEMWEB GET, PUT und
OPTIONS verarbeitet: stimmt so nicht. PUT und OPTIONS habe ich erstmal
entfernt.

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com