Så når der skrives i "item" feltet der er et 5 cifret tal, så skal den retunerer indholdet til de andre felter.
De 2 felter "Qty" og "Total_price" Når Item er hentet skal Qty være "1" og "Total_price" være lig med prisen, Ellers skal "Total_price" være lig med prisen gange "Qty".
I dette særtema om aspekter af AI ser vi på skiftet fra sprogmodeller til AI-agenter, og hvordan virksomheder kan navigere i spændet mellem teknologisk hastighed og behovet for menneskelig kontrol.
Hvis alle de data skal være til rådighed, så kommer der en situation, hvor det faktisk nok er bedre og hurtigere at slå op i selve databasen med noget ajax-noget !-)
Du laver en simpel side serverside, som laver opslaget i databasen og returnerer en minimal fil med de nødvendige oplysninger, smartest med json (som også er integreret i f.eks. php !-)
Clientside indsætter du en stribe relativ simpel javascript, som foretager forespørgslen mod serveren, modtager data og indsætter dem i dokumentet via DOM ...
-- til slut kan du jo så kalde en opdatering af f.eks. fakturasum e.l.
Script-koden bliver så ca. således (absolut utestet, skrevet lige her, og sikkert derfor en anelse hrm ...)
<script type="text/javascript"> function getXmlHttpObject(){ try{ xmlHttp = new XMLHttpRequest(); }catch(e){ try{ xmlHttp = new ActiveXObject("Msxml2.XMLHTTP"); }catch(e){ xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); } } return xmlHttp; } function getDetails(elm){ var url = "/getDataForItem.php?item=" + elm.value; var obj = retrieveData(url); var elms = elm.parentNode.parentNode.getElementsByTagName("input"); var priceElm = null; for(i=0,im=elms.length;im>i;i++){ //kun nødvendig, hvis din prisopdatering skal bruge et specifikt felt, det ville jeg ikke selv gøre if(elms[i].name = "price")priceElm = elms[i]; //opdater felter if(obj[elms[i].name]){ elms[i].value = obj[elms[i].name]; }else if(elms[i].name == "qty") elms[i].value = 1; }else if(elms[i].name == "price_total") elms[i].value = obj["price"]; } } updateTotals(priceElm); } function retrieveData(url){ var xmlHttp = getXmlHttpObject(); if(xmlHttp){ xmlHttp.onreadystatechange = function(){ if (xmlHttp.readyState == 4){ return eval("(" + xmlHttp.responseText + ")"); } } xmlHttp.open("GET",url); xmlHttp.send(null); }else{ alert("fejl");//Sæt selv en ordentlig fejlmeddelelse return null; } } //og så skal du nok også have en funktion, der opdaterer totaler function updateTotals(elm){ var f = elm.form;//form-elementet skal du bruge //resten af koden må du selv tilføje } </script>
Hov noget af det skal laves direkte omvendt, for vi skal jo vente med at indsætte til alle data er tilstede:
getXmlHttpObject er fin nok, getDetails og retrieveData bliver så:
function getDetails(elm){ var url = "/getDataForItem.php?item=" + elm.value; retrieveData(url,elm); } function retrieveData(url,elm){ var xmlHttp = getXmlHttpObject(); if(xmlHttp){ xmlHttp.onreadystatechange = function(){ if (xmlHttp.readyState == 4){ insertData(eval("(" + xmlHttp.responseText + ")"),elm); } } xmlHttp.open("GET",url); xmlHttp.send(null); }else{ alert("fejl");//Sæt selv en ordentlig fejlmeddelelse return null; } } -- og så en ny funktion:
function insertData(obj,elm){ var elms = elm.parentNode.parentNode.getElementsByTagName("input"); var priceElm = null; for(i=0,im=elms.length;im>i;i++){ //kun nødvendig, hvis din prisopdatering skal bruge et specifikt felt, det ville jeg ikke selv gøre if(elms[i].name = "price")priceElm = elms[i]; //opdater felter if(obj[elms[i].name]){ elms[i].value = obj[elms[i].name]; }else if(elms[i].name == "qty") elms[i].value = 1; }else if(elms[i].name == "price_total") elms[i].value = obj["price"]; } } updateTotals(priceElm); }
Det giver da lidt mening ;o) Så nu sidder jeg og leger lidt med det og prøver at få tingene til at ske. Det hjælper jo også når man kigger lidt i din kode, og søger lidt på nogle af de ting der virker lidt "sorte".
Ja, du kan sagtens bruge w3schools tutorial som inspiration, men bemærk, at det er endnu et af de steder, hvor w3schools tutorial er fuldstændig ude på et sidespor, for der er ikke meget af ideen i ajax tilbage, hvis man benytter færdigformattering i html på serveren og innerHTML på klienten ...
-- det første fordi hele ideen er, at så meget processering som muligt skal overlades til klienten, det andet fordi der ikke findes noget innerHTML i nogle rekommendationer og det vil få en browser, der arbejder x(ht)ml-baseret til at gå ned med et hult drøn med en xml-fejl !-)
-- men hvis du ud fra eksemplet kan stable et json-objekt på benene er det helt fint !-)
<script type="text/javascript"> function getXmlHttpObject(){ try{ xmlHttp = new XMLHttpRequest(); }catch(e){ try{ xmlHttp = new ActiveXObject("Msxml2.XMLHTTP"); }catch(e){ xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); } } return xmlHttp; } function getDetails(elm){ var url = "../scripts/getDataForItem.php?item=" + elm.value; retrieveData(url,elm); } function retrieveData(url,elm){ var xmlHttp = getXmlHttpObject(); if(xmlHttp){ xmlHttp.onreadystatechange = function(){ if (xmlHttp.readyState == 4){ insertData(eval("(" + xmlHttp.responseText + ")"),elm); } } xmlHttp.open("GET",url); xmlHttp.send(null); }else{ alert("fejl");//Sæt selv en ordentlig fejlmeddelelse return null; } }
function insertData(obj,elm){ var elms = elm.parentNode.parentNode.getElementsByTagName("input"); var priceElm = null; for(i=0,im=elms.length;im>i;i++){ //kun nødvendig, hvis din prisopdatering skal bruge et specifikt felt, det ville jeg ikke selv gøre if(elms[i].name == "price")priceElm = elms[i]; //opdater felter if(obj[elms[i].name]){ elms[i].value = obj[elms[i].name]; }else if(elms[i].name == "qty") elms[i].value = 1; }else if(elms[i].name == "price_total") elms[i].value = obj["price"]; } } updateTotals(priceElm); } </script>
Jeg har prøvet at sammen sætte noget udfra dit og det der var på W3School
Det virker nogen lunde, men det er godt nok blevet lidt rodet. men her er det indtil videre
var xmlHttp
function showHint(str) { if (window.event.keyCode==13 || window.event.keyCode==9) { strTmp=str.value; returnName=str.name; xmlHttp=GetXmlHttpObject() if (xmlHttp==null) { alert ("Browser does not support HTTP Request") return } var url="gethint.php" url=url+"?query="+strTmp url=url+"&return_id_tmp="+returnName xmlHttp.onreadystatechange=stateChanged xmlHttp.open("GET",url,true) xmlHttp.send(null) } }
function stateChanged(){ if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete") { xmlDoc=xmlHttp.responseXML;
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.