Jednym ze sposobów obejścia ograniczeń wynikających zasady zapytań w ramach 1 domeny jest kierowanie komunikacji przez plik php umieszczony na serwerze webowym. Skrypt ten zaproponował Janus, który używa go z powodzeniem do obsługi swoich wizualizacji. Oto zawartość pliku wago.php:
<?php IF ($_REQUEST['TYPE']=='READPI') { $url = "http://192.168.1.1/READPI?ADR=" . $_REQUEST['ADR'] ."&FORMAT=" . $_REQUEST['FORMAT'] ; }; IF ($_REQUEST['TYPE']=='WRITEPI') { $url = "http://192.168.1.1/WRITEPI?ADR1=" . $_REQUEST['ADR1'] . "&VALUE1=" . $_REQUEST['VALUE1'] . "&FORMAT1=" . $_REQUEST['FORMAT1'] ; }; $handle = fopen($url,"r") ; $contents = stream_get_contents($handle) ; fclose($handle) ; echo $contents; ?>
Jedyną rzeczą, którą trzeba w nim zmienić, to adres IP sterownika (w przykładzie 192.168.1.1). Spodziewam się też, choć tego nie testowaliśmy, że w przypadku, gdy serwer, na którym umieszczamy plik PHP jest w innej sieci niż sterownik, w miejsce IP sterownika można wpisać adres i port serwisu ddns (jak np. dyndns), pod którym sterownik jest dostępny.
Kolejnym krokiem jest zmodyfikowanie mojej wtyczki do jQuery. W funkcji $.fn.WriteValue zapis
var AjaxObj = $.ajax({ type: 'POST', url: ServerName+"WRITEPI", data: {ADR1: options.address, VALUE1: options.value, FORMAT1: options.format}, (…)
Trzeba zastąpić:
var AjaxObj = $.ajax({ type: 'POST', url: ServerName, data: {TYPE: 'WRITEPI', ADR1: options.address, VALUE1: options.value, FORMAT1: options.format}, (...)
Podobnie w funkcji $.fn.ReadValue:
var AjaxObj = $.ajax({ type: 'POST', url: ServerName+"READPI", data: {ADR: options.address, FORMAT: options.format}
zastępujemy przez:
var AjaxObj = $.ajax({ type: 'POST', url: ServerName, data: {TYPE: "READPI", ADR: options.address, FORMAT: options.format}
Ponadto w pliku html w zmiennej ServerName w miejsce pokazywanego przeze mnie:
var ServerName='http://192.168.1.3/';
powinno pojawić się:
var ServerName='http://www.yourserver.com/wago.php';
W ten sposób, wszelkie kwerendy ajaxowe wywoływane przez strony html zostaną skierowane na plik PHP, który przekieruje komunikację na sterownik PLC. Po wgraniu strony html i pliku php na ten sam server, strony powinny działać pod wszystkimi przeglądarkami (z pominięciem IE).