Neuigkeiten:

moziloCMS verwendet Cookies. Wenn Sie auf unserer Seite weitersurfen, stimmen Sie der Cookie-Nutzung zu Datenschutzerklärung
moziloCMS Layouts
moziloCMS Plugins

Hauptmenü

http-request via jQuery

Begonnen von Dragonfly, 09. Juli 2015, 08:59:37

« vorheriges - nächstes »

Dragonfly

beforeSend
control.js:20 192.168.125.70:8181/CCU-RemotePC.exe
control.js:21 state=dom.GetObject%28%27BidCos-RF.IEQ0023638%3A1.STATE%27%29.Value%28%29
Kategorie.html?draft=true:1

XMLHttpRequest cannot load http://192.168.125.70:8181/CCU-RemotePC.exe?state=dom.GetObject%28%27BidCos-RF.IEQ0023638%3A1.STATE%27%29.Value%28%29. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://192.168.125.60' is therefore not allowed access.


leider noch nichts, aber ich hab jetzt eine url, die ich direkt verwenden kann.

function get_ccu_state(para,that) {
    $.ajax({
// wenn du hier kommentar davor ?achst
url: "http://" + ccu_base + "?" + para,
// must du diese beiden entfernen
//url: ccu_base,
//data: para,
        method: "GET",
crossDomain: true,

// 2.
// dann hier den kommentar entfernen und wieder mit 1 beginnen
//processData:false,
// 3.
// dann hier den kommentar entfernen und wieder mit 1 beginnen
//traditional:true,
        dataType: "xml",
        beforeSend:function() {
    console.log("beforeSend");
    console.log(ccu_base);
    console.log(para);
        },
        success:function(xml) {
    console.log("success");
    console.log(xml);
            var state = $(xml).find("state").text();
            if(state == "true") {
                that.find("button").css("background-color","#00FF00").text("Ein").val(".State(0)");
            } else if(state == "false") {
                that.find("button").css("background-color","#FF0000").text("Aus").val(".State(1)");
            } else {
                that.find("button").css("background-color","#0000FF").text("Unbekant").val("").prop("disabled",true);
            }
        },
        error:function(jqXHR, textStatus, errorThrown) {
    console.log("error");
    console.log(textStatus);
    console.log(errorThrown);
            that.find("button").css("background-color","#0000FF").text("Unbekant").val("").prop("disabled",true);
        }
    });
}

function ccu_rawurlencode_js(str) {
// 1.
// zuerst hier nach und nach auskommentieren
//return str;
//return str.replace(/'/g, '%27');
//return str.replace(/'/g, '%27').replace(/\(/g, '%28').replace(/\)/g, '%29');
return str.replace(/'/g, '%27').replace(/\(/g, '%28').replace(/\)/g, '%29').replace(/:/g, '%3A');
// nur bei diesen nicht
    return encodeURIComponent(str).replace(/!/g, '%21').replace(/'/g, '%27').replace(/\(/g, '%28').replace(/\)/g, '%29').replace(/\*/g, '%2A').replace(/\~/g, '%7E').replace(/#/g,'%23');
}

stefanbe

mach mal die template.html auf und fügr im head bereich ganz oben das ein
<meta http-equiv="Access-Control-Allow-Origin" content="*">

lg stefanbe

Dragonfly

Ist drinnen, leider keine Änderung  :'(

stefanbe

ok habs gefunden

du must auf dem server wo die CCU-RemotePC.exe das Access-Control-Allow-Origin setzen

entweder in ner .htaccess oder mit dem webserver der da läuft oder ...

lg stefanbe

Dragonfly

#19
also die .exe existiert ja nicht wirklich, die ist nur bestandteil der url und kann heißen wie sie will.

du meinst also die .htaccess die auf der Synology läuft, wo Mozilo installiert ist ändern?
also so:
# mozilo generated not change from here to mozilo_end
Options -Indexes
RewriteEngine On
RewriteRule ^(.*)/mod_rewrite_t_e_s_t\.html$ $1/index\.php?moderewrite=ok [L]
RewriteRule \.html$ index\.php [QSA,L]
# mozilo_end
Header add Access-Control-Allow-Origin "*"
Header add Access-Control-Allow-Headers "origin, x-requested-with, content-type"
Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"


... was keine Änderung brachte...

Dragonfly

Ich versteh gerade nicht, wo der Hänger ist...

bisher hatte ich das so laufen:
mit wget oder curl die seite runterladen, auswerten - befehl setzten, befehl senden.

Kann man nicht einen einfachen request draus bauen, der nur eine url aufruft - also wie in dem allerersten beispiel von mir.
dort konnte ich ja bereits was schalten.
dann wäre zumindest mal sichergestellt, daß die kommunikation über das script geht - danach erst das runterladen des status behandeln?

Dragonfly

Ok, wenn ich jetzt eine url direkt im browser aufrufe bekomme ich den status in einem neuen tab.
wenn ich nun auf "Ziel speichern unter" gehe, lädt er mir die .exe runter, keine xml - vielleicht ist ja da der wurm drinnen?!

ich häng mal die exe dran.

stefanbe

das problem liegt daran das die browser es nicht mögen wenn mann in einem iframe nee ander domain aufruft "Access-Control-Allow-Origin".

du müstes es schaffen das der server 192.168.125.70:8181 einen header "Access-Control-Allow-Origin "*"" mit schickt.

ich bin da grad noch an einer anderen idee dran.

lg stefanbe

stefanbe

der server lauscht auf dem port "8181" wenn du jetzt die domain 192.168.125.70 mit dem port aufrufts weis der server was zu tun ist deshalb das mit der "CCU-RemotePC.exe" die nicht so heisen muss es geht da nur drum parameter mit zu geben.

lg stefanbe

stefanbe

so hab das geändert kanste es mal ausprobieren?

siehe oben der anhang

lg stefanbe

Dragonfly

so;

kein fehler da - geht zwar nicht aber:
die console gibt aus:
success - control.js:14
null - control.js:15

wenn jetzt null der "state" ist, was ich annehme, wäre es nur noch eine "fehlkonfiguration"...
die ccu kennt also irgendwas nicht.

den teil hast du ja drinnen gelassen - der geht auch, wenn ich die url händisch zusammenbastle:
dom.GetObject('BidCos-RF.IEQ0023638:1.STATE')

leider sehe ich nirgends mehr die zusammengebaute url, um den fehler eingrenzen zu können.
null kommt im regelfall, wenn das in der klammer in der ccu nicht vorhanden ist.

Dragonfly

ich hab jetzt noch ein wenig rumprobiert - bekomme beim direkten url-aufruf nur eine "null" zusammen wenn in der klammer was nicht passt:
dom.GetObject('CCU-RemotePC')
das sollte auch ein "true" ergeben - kommt aber leider "null" zurück

oder wenn "state=" nicht da ist:
so geht aber auch nichts:
$button_state = "state=dom.GetObject('CCU-RemotePC')";

Dragonfly

andererseits, wenn ich hier
else if(state == "null") {
                that.find("button").css("background-color","#FF0000").text("Aus").val(".State(1)");


eingebe, sollte der button ja auf aus sein - bleibt aber auf unbekannt  :'(

wasp

--- sorry für die einmischung : Aber rein technisch geht das am OS / browser (...) und ggf. lokalem kram wie antivirus oder sw/hw - fws anderen blockern vorbei ?!  ::) :-X Aber sicher ist das ja bedacht...  8)
Irre tiefgehend...  :)

Dragonfly

Nunja, es läuft ja von dem PC aus, wo ich teste ein Programm das das gleiche macht und funktioniert.
Sicherheitshalber wurde auch die IP von der Syno freigegeben - obwohl das wahrscheinlich nicht sein muß.

Wenn du dir CCU-RemotePC von mir runterlädst (www.dragonfly.at) kannst du z.B. den Monitor ausschalten.
Wenn nun ein Befehl wie z.B.: http://localhost/screen_off dies machen soll, kann der auch auf einer Webseite auf der anderen Seite der Welt sein, denn "localhost" ist ja der Rechner, mit dem ich den Befehl aufrufe, nicht wo die Webseite gehostet wird  - also reagiert das Programm auch nur dort - zumindest funktioniert das mit normalen Links so.

Also sollte auch hier der Sender des Befehls der PC sein, der das Script aufruft, nicht die Syno. Ausgehend davon sollten alle Wege frei sein...