Używamy plików cookies (tzw. ciasteczka) by spersonalizować treść i ogłoszenia oraz by analizować ruch na stronie.  W sposób automatyczny dzielimy się informacjami o Twoim użyciu tego portalu z dostawcami ogłoszeń, którzy mogą połączyć te informacje z informacjami, które im udzieliłaś/łeś lub, które sami zebrali. Korzystanie z witryny bez zmiany ustawień dotyczących cookies oznacza, że będą one zamieszczane w Państwa urządzeniu końcowym.  Możecie Państwo dokonać w każdym czasie zmiany ustawień dotyczących cookies zmieniając opcje przeglądarki.

Przekierowanie przez PHP

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).