Ajax vs. CGI
hotti
- programmiertechnik
1 Pragma0 hotti
0 hotti0 Edgar Ehritt
hi,
ich mache mir gerade einen Kopf zu folgender Sache:
Ein Formular soll verarbeitet werden. Sofern JavaScript aktiviert ist, soll das per Ajax passieren. Ist JS nicht aktiviert, soll das wie ein ganz normales CGI ablaufen. Soweit so gut und das tut schon alles mit meinen Browserchen Moz und IE.
Dazu habe ich im Formtag ein onSubmit="return(false)" und für den Submit-Button ein onClick-Event.
Die Frage ist die, ob es damit für jeden Browser sichergestellt ist, dass bei aktivierten JS auch wirklich nur die Ajax-Variante läuft? Oder sollte vielleicht noch der Submit-Button type='submit' in ein type='button' umgewandelt werden?
Oder ist sonstnoch irgendwas zu beachten?
Viele Grüße,
350er Java-Hotte
Dein Form könnte z.B. auch per Enter in einem Inputfeld ausgelöst werden, dann nix onClick. Ergo pack Dein JS komplett ins onSubmit:
<form ... onSubmit="return jsGedoens(this)">
function jsGedoens(formObj) {
....
return false;
}
Dein Form könnte z.B. auch per Enter in einem Inputfeld ausgelöst werden, dann nix onClick. Ergo pack Dein JS komplett ins onSubmit:
<form ... onSubmit="return jsGedoens(this)">
Cool ;-)
Also doch: Entscheidend ist das Event onSubmit (ist schon online, link s.o.).
Danke Dir!
Horst Haselhuhn
hi,
Die Frage ist die, ob es damit für jeden Browser sichergestellt ist, dass bei aktivierten JS auch wirklich nur die Ajax-Variante läuft? Oder sollte vielleicht noch der Submit-Button type='submit' in ein type='button' umgewandelt werden?
Ooops, hab nachgelesen, dass .type an InputElements nur lesbar ist. Btw., mein Versuch, type trotzdem zu ändern, ging lediglich im IE schief, Mozilla, FF und Opera (meine lieben Browserchen) haben das anstandslos geschluckt. Na, egal. Entscheidend, dass kein Submit erfolgt sondern Ajax gefeuert wurd, ist dann wohl das
onSubmit="return(false)"
im Form-Tag, sehe ich das richtig?
Hotti
Hallo Rolf,
die JS-Funktion mob() würde ich etwas erweitern:
function mob(){
var mob;
try{ // Mozilla, Opera, Safari sowie Internet Explorer (ab v7)
mob=new XMLHttpRequest();
}catch(e){
try{ // MS Internet Explorer (ab v6)
mob=new ActiveXObject("Microsoft.XMLHTTP");
}catch(e){
try{ // MS Internet Explorer (ab v5)
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
}catch(e){
mob=false;
}
}
}
return mob;
}
Auch die Funktion xq() würde ich anders gestalten:
function xq(url){
var maob=mob();
if(maob){
var url ="/cgi-bin/altajax.cgi?&ff="+document.getElementById('ff').value;
maob.open("GET", url, false);
maob.send(null);
var meta=maob.responseText.split("|");
document.getElementById('ff').value = meta[0];
document.getElementById('res').value = meta[1];
return(false);
}
return(true);
}
Käme es beispielsweise zu Problemen bei der Erstellung des Requestobjekts (var maob
), würde so immer noch (normal) das Formular abgesendet werden. Während Deine jetzige Variante nur darauf achtet, ob Javascript aktiviert ist, ungeachtet dessen, ob vielleicht ein uralter Client ohne AJAX-Unterstützung vorbeischneit.
Gruß aus Berlin!
eddi
Ups:
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
mob=new ActiveXObject("Msxml2.XMLHTTP");