Selvtak og tak for points :)
Faktisk tog jeg lige et hiv til af 'den sjove' og kom i tanker om en måde at lave et supersimpelt http-objekt, der kan sende et antal variabler til en server - og til en vis grad modtage svar:
Man sender et antal variabler til serveren - f.eks. via en funktion 'sendHttp':
<button onclick="sendHttp('context','testing', 'myVar','gnu')">Test 1</button>
Denne knap vil sende to variabler:
1. 'context' med værdien 'testing'
2. 'myVar' med værdien 'gnu'
Der skal kunne sendes et vilkårligt antal variabel-par på denne måde - kun begrænset af en query-strengs sædvanlige længde-begrænsning (omkring 2000 tegn).
På serveren modtages disse variabler i $_GET-array'et. Hvis man nu har f.eks. 100 gif'er liggende, der alle er 1px høj og fra 1 til 100px bred - så kan du vælge at redirect'e til én af disse giffer og bredden af den gif vil så repræsentere svaret fra serveren ... ét svar ud af 100 mulige.
Gifferne navngives: 'http_1.gif' til 'http_100.gif'. Naturligvis kunne du vælge et andet antal - det bestemmer din applikations behov :)
På klienten loades billedet ind i et skjult span, som vi måler bredden på, når billedet loader.
Loader billedet af en eller anden grund ikke, vil der komme en fejlbesked (det sker på billedets onabort- eller onerror-event).
Finder vi derimod en bredde, handler vi på den:
<script type="text/JavaScript">
var serverURL = "
http://localhost/___Eksperten/httpPic.php";var messages = new Array();
messages[1] = "Der opstod en fejl. Variablerne kunne ikke bruges på serveren.";
messages[80] = "Her er en besked fra serveren ... der blev returneret 80.\n- hvad det betyder, ved kun du :)";
messages[90] = "Her er en besked fra serveren ... der blev returneret 90.\n- hvad det betyder, ved kun du :)";
messages[100] = "Her er en besked fra serveren ... der blev returneret 100.\n- hvad det betyder, ved kun du :)";
function sendHttp() {
var im, o, aQ=[], a = arguments;
for (var i=0; i<a.length; i+=2) aQ.push( a[i]+"="+escape(a[i+1]) );
im = document.createElement("img");
im.onload = recieveHttp;
im.onabort = im.onerror = httpError;
o = document.getElementById("httpLoader");
o.replaceChild(im, o.firstChild);
im.src = serverURL + "?" + aQ.join("&");
}
function httpError() {
// Enten kunne php-filen ikke findes
// - eller der blev redirected til et billede, der ikke findes
alert("Der opstod en fejl")
}
function recieveHttp() {
var w = document.getElementById("httpLoader").offsetWidth;
// Her handler du på værdien af w, som svarer til $ret på serveren.
alert( messages[w] );
}
</script>
<span id="httpLoader" style="position:absolute;visibility:hidden"> </span>
<button onclick="sendHttp('context','testing', 'myVar','gnu')">Test gnu</button><br>
<button onclick="sendHttp('context','testing', 'myVar','hest')">Test hest</button><br>
<button onclick="sendHttp('context','testing', 'myVar','ko')">Test ko</button><br>
<button onclick="sendHttp('context','testing', 'myVar','guldfisk')">Test guldfisk (ukendt myVar-variabel)</button><br>
<button onclick="sendHttp('context','test', 'myVar','ko')">Test ko (med ukendt context-variabel)</button>
- og PHP-dokumentet:
<?
$ret = "1";
if ( isset($_GET["context"]) && $_GET["context"]=="testing" ) {
if ( isset($_GET["myVar"]) ) {
switch ($_GET["myVar"]) {
case "hest":
// Her handles på at $_GET["myVar"] har værdien 'hest'
// - og du sætter $ret til en svar-værdi:
$ret = "100";
break;
case "ko":
// Her handles på at $_GET["myVar"] har værdien 'ko'
// - og du sætter $ret til en svar-værdi:
$ret = "90";
break;
case "gnu":
// Her handles på at $_GET["myVar"] har værdien 'gnu'
// - og du sætter $ret til en svar-værdi:
$ret = "80";
break;
}
}
}
Header( "Location: http_".$ret.".gif" );
?>