"EnjoyNews" <mh-nyheder@mail.dk> wrote in message
news:47b03deb$0$2104$edfadb0f@dtext02.news.tele.dk...
>
> "Stig Johansen" <stig_johansen_it_at_=(@)hotmail.com> skrev i en
meddelelse
> news:47afd325$0$90269$14726298@news.sunsite.dk...
> > Helt overordnet...
> >
> > EnjoyNews wrote:
> >
> >> Så der er egentlig 2 spørgsmål.
> >> 1. Hvordan laver man helt simpelt et javascript som kører en php fil
med
> >> onclick
> >
> > Ved onclick kalder du en funktion, der initierer en XMLHTTPRequest, og
> > sender til din PHP.
> >
> >> 2. Hvordan fører man det tilbage til siden igen uden at have forladt
den.
> >
> > Når XMLHTTPRequestet er færdigt (svar fra PHP'et) ligger svaret i en
> > property på XMLHTTPRequest'et.
>
>
>
> pyha... en helt ny verden
> Jeg tror jeg kan lave det med vis/skjul knap som du foreslår.
>
> Jeg har lavet en skjul/vis div sådan her:
>
>
> <script type="text/javascript">
> <!--
> function toggleBox(szDivID, iState) // 1 visible, 0 hidden
> { if(document.layers) //NN4+
> { document.layers[szDivID].visibility = iState ? "show" :
de"; }
> else if(document.getElementById) //gecko(NN6) + IE 5+
> { var obj = document.getElementById(szDivID);
> obj.style.visibility = iState ? "visible" : "hidden"; }
> else if(document.all) // IE 4
> { document.all[szDivID].style.visibility = iState ? "visible" :
> "hidden"; }
> }
> // -->
> </script>
>
>
> Og på siden gør jeg så sådan her:
>
> <input type="button" onClick="toggleBox('addmedia',1);" value="Add new
> media">
> <div ID="addmedia" class="addmedia">
> Her har jeg så en almindelig html form med medietyper og en send knap
> samt nogle mysql inserts og updates.
> Og så denne cancel knap hvis man fortryder <input type="button"
> onClick="toggleBox('addmedia',0);" value="Cancel">
> </div>
>
>
> Der fungere helt fint lige som det skal.
>
> Men så er der jo at jeg gerne ville have den til at lave de mysql updates
on
> the run, uden at den skal updatere siden...
Det er jeg helt med på.
> Jeg har læst lidt om det Ajax og er ikke helt med
Så må du læse videre ;)
> Er det noget der skal købes og installeres/lægges på serveren ?
Du behøver ikke købe noget som helst. Afhængig af dine funktioner på
serveren, skal du måske ikke heller ikke lave noget der.
> Eller er det bare en måde at programmere på ?
Lige nøjagtig. Ajax er egentlig bare (blevet?) et udtryk for at bruge
Javascript til XMLHTTPRequest.
> Eller kan det laves udewn Ajax, med bare almindelig javascript ?
Både ja?
Her er lidt klip fra mit - fungerende - 'legeprojekt'.
En funktion til at oprette 'Ajax':
function makeReqObj() {
var localreq ;
try { localreq = new XMLHttpRequest(); }
catch (e) {
try { localreq = new ActiveXObject("Msxml2.XMLHTTP"); }
catch (e) {
try { localreq = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e) {
alert( "Np XMLHTTPRequest installed");
}
}
}
return localreq;
}
Bør evt. lægges i en .js fil for sig, så den kan genbruges.
i HTML'et har jeg så en textbox,encheckbox og en tekstboks og en onclick,
der kalder denne her:
function clickedaddword() {
Sal9000Function = '101' ;
neworchangekeyword(primarykeywordurl,document.getElementById('newkeyword').v
alue,document.getElementById('newiskeyword').checked,document.getElementById
('newkeypri').value );
}
og neworchangekeyword ser sådan her ud:
function neworchangekeyword(url,word,iskey,pri) {
var newwords ;
newwords = '&word='+ word
newwords += '&iskey='+ iskey
newwords += '&pri='+ pri
Xkeywords = makeReqObj();
if ( Xkeywords != null) {
Xkeywords.open( 'get', url +
'?Sal9000Function='+Sal9000Function+newwords+'&debug='+debug , true);
Xkeywords.onreadystatechange = keywordsready;
Xkeywords.send(null);
}
}
Tilbagemeldingen fra 'Ajax', keywordsready ser sådan ud:
function keywordsready() {
if ( Xkeywords.readyState == 4) {
if ( Xkeywords.status != 200) {
if (Xkeywords.status == 500 ) {
alert ( 'Fejl ved AJAX request : Status req.status:
'+Xkeywords.status+' returneret.');
var debugWindow = window.open('','Debug_data');
debugWindow.document.open("text/html", "replace");
debugWindow.document.write(Xkeywords.responseText);
debugWindow.document.close();
}
else alert( 'Error , AJAX request : Status req.status:
'+Xkeywords.status+' returneret.');
}
else {
if ( Sal9000Function == '200')
updatesentenses(Xkeywords.responseText );
...... og en masse ekstra if'er....
Opdatering af keywords ligger i en <div>, og opdateringen ser sådan her ud:
function updatekeywords(keywords) {
var boxnode = document.getElementById('Sal9000Keywords');
boxnode.innerHTML = "" ;
var m = document.createElement('div');
boxnode.appendChild(m);
m.innerHTML = keywords ;
}
Det er sådan ca. hvad du har brug for + noget PHP på serversiden. Det her
laver jeg for at afprøve grænser på ASP, så det er ikke så relevant. Men i
store træk, udskriver den nøjagtig det samme som man ellers ville have
skrevet i <div>' en i HTML - inklusive evt <input> <img> osv, kun fantasien
sætter grænser.
Det der sker her er kort:
værdierne fra 'newkeyword', 'newiskeyword' og 'newkeypri' indlæses i
Javascript og pakkes sammen til en URI.
URI'en sender til ASP, hvor den kan aflæses med
Request.Querystring('newkeyword') osv.
ASP'et opdaterer databasen og sender svar tilbage = HTML'et , der skal være
i <div>'en
Svaret (= HTML'et) fra ASP'et ligger i Xkeywords.responseText, og opfateres
ved at 0-stille <div>'en og oprette det igen med m.innerHTML = keywords ;
Du må selv prøve at passe det ind i dit eget projekt, men det svarer
nogenlunde til en send knap på en form (action=get) med de 3 felter.
Du kan også bruge 'post', så skal man bare pakke data'ene ned i
Xkeywords.send(Data her);
Og aflæse data'ene i ASP med Request.Form('navn') i stedet.
Funktionerne bliver kaldt nogle forskellige steder og hedder noget
forskelligt, men her er fra et sted i noget statisk html:
<td><input id="newkeyword" name="newkeyword" value="nyt" type="text" /></td>
<td><input id= "newiskeyword" name="newiskey" value = "*" type="text"
/></td>
<td><input id="newkeypri" name="newkeypri" value="0" type="text" /></td>
<td onclick="javascript:clickedaddword();">OK</td>
--
Med venlig hilsen/Best regards
Stig Johansen