> Utan jQuery Ajax?
Nej. Det är jQuery som hanterar händelsen "klick" på en knapp
och gör Ajax anropet till servern med ett värde från 2 textrutor
Värdet används för en databassökning och resultatet skickas
tillbaka till browsern och funktionen som hanterar Ajax-svaret
skriver till en annan textruta. 12-13 ms från klicket till att
svarsrutan uppdateras. Eller "samtidigt" med de mått som
en vanlig användare använder...
Aja, Det är bara en enkel proof-of-concept utan speciellt mycket
felhantering eller liknande. Och inga hemligheter så håll till godo...
Python scriptet som kör det hela. Det är alltså samma script som dels
laddar själva sidan och som sen "svarar" på de två ajax anropen. Så klart
lite klumpigt att skriva HTML koden på det där sättet, men det är som sagt
bara en enkel test (min första kod med ajax anrop, för övrigt).
Kod: Markera allt
import cgi
import os, sys
import cgitb; cgitb.enable()
import wasd
import datetime
import vms.starlet
import rdb
curs_iteminfo = rdb.statement("""
select MK010T_BANA, MK010T_KEY_DATUM, MK010T_TILLV_STATUS,
MK010T_PACK_STATUS, MK010T_TILLV_DATUM, MK010T_TILLV_TID,
MK010T_PACK_DATUM, MK010T_PACK_TID, MK010T_PACKORDERNR,
MK010T_RAORDER, MK010T_HULAND, MK010T_MQSTATUS, MK010T_MQDATUM
from mk010t
where MK010T_ARTIKELNR = ? and MK010T_SERIENR = ?""")
curs_upd_huland = rdb.statement("""
update mk010t set MK010T_HULAND = ?
where MK010T_ARTIKELNR = ? and MK010T_SERIENR = ?""")
def load_main_page ():
print 'content-type: text/html\n'
print '<!DOCTYPE html>'
print '<head>'
print '<meta http-equiv="X-UA-Compatible" content="IE=edge" />'
print '<title>Ajax test</title>'
print '<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">'
print '<script src="/js/JQUERY-3_2_1.JS"></script>'
print '<script>'
print '$(document).ready(function(){'
print ' '
print ' $("#getinfo").click(function(){'
print ' start_time = new Date().getTime()'
print ' $.post("/hv-bin/rb_main_4.py",'
print ' {func:"getinfo",'
print ' qart: $("#artin").val(),'
print ' qser: $("#serin").val()'
print ' },'
print ' function(result){'
print ' let request_time = new Date().getTime() - start_time;'
print ' $("#artben").html(result);'
print ' $("#getinfo_runtime").html("Getinfo call time "+request_time+ " ms.");'
print ' })'
print ' });'
print ' '
print ' $("#updland").click(function(){'
print ' start_time = new Date().getTime()'
print ' $.post("/hv-bin/rb_main_4.py",'
print ' {func:"updland",'
print ' qland: $("#landin").val(),'
print ' qart: $("#artin").val(),'
print ' qser: $("#serin").val()'
print ' },'
print ' function(result){'
print ' let request_time = new Date().getTime() - start_time;'
print ' $("#getinfo").click();'
print ' $("#updland_runtime").html("Updland call time "+request_time+ " ms.");'
print ' })'
print ' });'
print ' '
print '});</script>'
print '</head><body>'
print '<table border="0"><tr>'
print '<td><br>Artno: <input type="text" id="artin" size="10">'
print '<td><br>Serno: <input type="text" id="serin" size="11">'
print '<td><br><button id="getinfo">Fetch</button>'
print '</table>'
print '<table border="0"><tr>'
print '<td><br>RA land: <input type="text" id="landin" size="4">'
print '<td><br><button id="updland">Upd</button>'
print '</table>'
print '<div id="artben"></div>'
print '<div id="getinfo_runtime"></div>'
print '<div id="updland_runtime"></div>'
print '</body></html>'
def run_func_getinfo():
rdb.read_only()
curs_iteminfo.execute(form.getvalue('qart','err'), form.getvalue('qser','err'))
r = curs_iteminfo.fetchall()
rdb.commit()
print 'Content-Type: text/html\n'
print '<br>'
for i in r:
print '<table border="0">'
print '<tr><td>Bana<td>', i[0], '<td>Key datum<td>', i[1]
print '<tr><td>Metik rapp<td>', i[4], '/', i[5], '<td>Tillv stat<td>', i[2]
print '<tr><td>Pack rapp<td>', i[6], '/', i[7], '<td>Pack stat<td>', i[3]
print '<tr><td>Pack ord<td>', i[8], '<td>RA ord/land<td>', i[9] , '/', i[10]
print '<tr><td>MQ datum<td>', i[12], '<td>MQ stat<td>', i[11]
print '</table>'
print '<br> '
print "<br>Timestamp : ", datetime.datetime.now()
def run_func_updland():
rdb.read_write()
curs_upd_huland.execute(form.getvalue('qland','err'),
form.getvalue('qart','err'),
form.getvalue('qser','err'))
rdb.commit()
print 'Content-Type: text/html\n'
print '<br>'
def run_func_error():
print 'Content-Type: text/html'
print ''
print '<br>Unknown func value.'
#
# Main processing starts here.
#
vms.starlet.setprn('WASD RB Srv')
rdb.attachDB('MK000DB_HV06')
if os.environ["REQUEST_METHOD"] == "POST":
form = cgi.FieldStorage()
if form.getvalue('func', 'error') == "getinfo":
run_func_getinfo()
elif form.getvalue('func', 'error') == "updland":
run_func_updland()
else:
run_func_error()
if os.environ["REQUEST_METHOD"] == "GET":
load_main_page()
Så här ser "source" ut i browsern, lite tydligare utan Python koden.
Kod: Markera allt
<!DOCTYPE html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<title>Ajax test</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script src="/js/JQUERY-3_2_1.JS"></script>
<script>
$(document).ready(function(){
$("#getinfo").click(function(){
start_time = new Date().getTime()
$.post("/hv-bin/rb_main_4.py",
{func:"getinfo",
qart: $("#artin").val(),
qser: $("#serin").val()
},
function(result){
let request_time = new Date().getTime() - start_time;
$("#artben").html(result);
$("#getinfo_runtime").html("Getinfo call time "+request_time+ " ms.");
})
});
$("#updland").click(function(){
start_time = new Date().getTime()
$.post("/hv-bin/rb_main_4.py",
{func:"updland",
qland: $("#landin").val(),
qart: $("#artin").val(),
qser: $("#serin").val()
},
function(result){
let request_time = new Date().getTime() - start_time;
$("#getinfo").click();
$("#updland_runtime").html("Updland call time "+request_time+ " ms.");
})
});
});</script>
</head><body>
<table border="0"><tr>
<td><br>Artno: <input type="text" id="artin" size="10">
<td><br>Serno: <input type="text" id="serin" size="11">
<td><br><button id="getinfo">Fetch</button>
</table>
<table border="0"><tr>
<td><br>RA land: <input type="text" id="landin" size="4">
<td><br><button id="updland">Upd</button>
</table>
<div id="artben"></div>
<div id="getinfo_runtime"></div>
<div id="updland_runtime"></div>
</body></html>
Och själva "testbilden" med timer värderna.
Skärmklipp.JPG
I testen kan man alltså hämta värden för ett artnr/sernr
och sedan uppdatera "land" tillbaka till databasen.