http://flashair/script.lua?abcdのように、スクリプト名の後に?で文字列を連結すると、引数として渡されます。
arg[0]でスクリプトのパスを
arg[1]で引数を取得することができます。
%20(空白)で区切るとarg[2]、arg[3]と増えていきます。
※引数は末端に改行がくっつきます。
print("HTTP/1.1 200 OK") print("") print("<HTML>") print("Script:",arg[0],"<br>") print("<b>Value1:",arg[1],"</b><br>") print("<b>Value2:",arg[2],"</b><br>") print("<b>Value3:",arg[3],"</b><br>") print("</HTML>")
リンクで決まったメニューを用意してもOKです
print("HTTP/1.1 200 OK") print("") print("<HTML>") print("<a href='/FTLE/run.lua?hello'>send hello</a><br>") print("<a href='/FTLE/run.lua?world'>send world</a><br>") print("<a href='/FTLE/run.lua?hello world !'>send hello world !</a><br>") print("Script:",arg[0],"<br>") print("<b>Value1:",arg[1],"</b><br>") print("<b>Value2:",arg[2],"</b><br>") print("<b>Value3:",arg[3],"</b><br>") print("</HTML>")
HTMLから呼び出してもOKです。
/test.htm
/FTLE/run.lua
/test.htm
<HTML> <a href='/FTLE/run.lua?hello'>send hello</a><br> <a href='/FTLE/run.lua?world'>send world</a><br> <a href='/FTLE/run.lua?hello world !'>send hello world !</a><br> </HTML>
/FTLE/run.lua
print("HTTP/1.1 200 OK") print("") print("<HTML>") print("Script:",arg[0],"<br>") print("<b>Value1:",arg[1],"</b><br>") print("<b>Value2:",arg[2],"</b><br>") print("<b>Value3:",arg[3],"</b><br>") print("</HTML>")
301や303応答を使うと、別のページに飛ばすことができます。
電子工作等の用途なら、即座に戻ってもアリですね。
※引数は末端に改行がくっつきます。
/test.htm
/FTLE/run.lua
電子工作等の用途なら、即座に戻ってもアリですね。
※引数は末端に改行がくっつきます。
/test.htm
<HTML> <a href='/FTLE/run.lua'>go example</a><br> <a href='/FTLE/run.lua?google'>go google</a><br> <a href='/FTLE/run.lua?yahoo'>go yahoo</a><br> </HTML>
/FTLE/run.lua
url="http://example.com/" if(arg[1]=="google\n")then url="http://www.google.com" end if(arg[1]=="yahoo\n")then url="http://www.yahoo.co.jp/" end print "HTTP/1.1 301 Moved Permanently" print "Pragma: no-cache" print("Location: "..url) print("")
入力フォームで自分自身に送信するようにしてもOKです。
ただし、送信内容に空白(%20)が含まれると分割されるのでご注意を。
ただし、送信内容に空白(%20)が含まれると分割されるのでご注意を。
print("HTTP/1.1 200 OK") print("") print([[<!DOCTYPE html> <form action="/FTLE/run.lua" method="get"> Message:<input type="text" name="msg" value="HelloWorld" size="20" /> <input type="submit" name="submit" value="submit" /></p> </form>]]) print("Script:",arg[0],"<br>") print("<b>Value1:",arg[1],"</b><br>") print("<b>Value2:",arg[2],"</b><br>") print("<b>Value3:",arg[3],"</b><br>") print("</HTML>")
画面の処理を継続しながら、裏でLuaスクリプトを操作するためには、
XMLHttpRequestを使って操作するのがもっとも手っ取り早くできます。
ただし、非同期通信になるのでちょっと気にすることが増えます。
/test.htm
/FTLE/run.lua
XMLHttpRequestを使って操作するのがもっとも手っ取り早くできます。
ただし、非同期通信になるのでちょっと気にすることが増えます。
/test.htm
<HTML> <input type="button" value="Get message" onclick="getmsg()"> <div id="res">Respons</div> <script> function getmsg() { document.getElementById( "res" ).innerHTML = "Wait..."; var xhr = new XMLHttpRequest(); xhr.open("GET", "/FTLE/run.lua"); xhr.setRequestHeader("If-Modified-Since", "Thu, 01 Jan 1970 00:00:00 GMT"); //キャッシュさせないため xhr.timeout=3000; //通信失敗時は3秒でタイム・アウトするように xhr.onload = function(){ if (xhr.status == 200) { document.getElementById( "res" ).innerHTML = xhr.responseText; }else { document.getElementById( "res" ).innerHTML = "Error! " + xhr.status; } }; xhr.onerror = function(){document.getElementById( "res" ).innerHTML = "Error!"}; xhr.send(); } </script> </HTML>
/FTLE/run.lua
print("HTTP/1.1 200 OK") print("") print("Hello World!") sleep(1000) --わざと待ち時間を入れてみる(非同期通信の利点がわかる)
データを渡してみましょう
/test.htm
/FTLE/run.lua
/test.htm
<HTML> Message:<input type="text" id="data" value="HelloWorld" size="20" /> <input type="button" value="Get message" onclick="getmsg()"> <div id="res">Respons</div> <script> function getmsg() { var dat = document.getElementById( "data" ).value; document.getElementById( "res" ).innerHTML = "Wait..."; var xhr = new XMLHttpRequest(); xhr.open("GET", "/FTLE/run.lua?"+dat); xhr.setRequestHeader("If-Modified-Since", "Thu, 01 Jan 1970 00:00:00 GMT"); //キャッシュさせないため xhr.timeout=3000; //通信失敗時は3秒でタイム・アウトするように xhr.onload = function(){ if (xhr.status == 200) { document.getElementById( "res" ).innerHTML = xhr.responseText; }else { document.getElementById( "res" ).innerHTML = "Error! " + xhr.status; } }; xhr.onerror = function(){document.getElementById( "res" ).innerHTML = "Error!"}; xhr.send(); } </script> </HTML>
/FTLE/run.lua
print("HTTP/1.1 200 OK") print("") print("Data get: "..arg[1]) sleep(1000) --わざと待ち時間を入れてみる(非同期通信の利点がわかる)
jqueryで書き直してみました。
上と全く同じ動作をしますが、よりシンプルに書けますね。
FTLE ver1.06(2017/09/15更新)から内蔵したjqueryを当てにして動作していますが、ご自身で配置されても問題ありません。
/test.htm
/FTLE/run.lua
上と全く同じ動作をしますが、よりシンプルに書けますね。
FTLE ver1.06(2017/09/15更新)から内蔵したjqueryを当てにして動作していますが、ご自身で配置されても問題ありません。
/test.htm
<!DOCTYPE html> <head> <title>Ajax Test</title> <!--- FTLE ver1.06以降に標準内蔵のjqueryを呼び出す ---> <script type="text/javascript" src="/SD_WLAN/jquery-3.2.1.min.js"></script> </head> <body> <input type="text" id="send_text_id" value="HelloWorld"> <input type="button" id="button_id" value="Get message"> <div id="response_div_id"> Respons </div> </body> <script> "use strict"; //厳格なチェックを有効にする //HTTPアクセスの設定を行います $.ajaxSetup({ cache: false, //キャッシュ禁止 timeout: 10000 //10秒でタイムアウト。0で無効。単位はms }); //id=button_idのボタンがクリックされたとき実行する //値が変わったときの場合は.changeを使う $("#button_id").click(function(e) { //表示を変える $("#response_div_id").html("Wait..."); //データを取り出し、URLを生成する var dat = $("#send_text_id").value; var url = "/FTLE/run.lua?"+dat; //HTTPリクエストを実行 $.get(url).done(function(data, textStatus, jqXHR){ //成功した場合:受信した結果を非同期で表示 $("#response_div_id").html(data); }).fail(function(jqXHR, textStatus, errorThrown){ //失敗した場合:エラー内容を表示 $("#response_div_id").html("Error:"+textStatus); }); }); </script> </HTML>
/FTLE/run.lua
print("HTTP/1.1 200 OK") print("") print("Data get: "..arg[1]) sleep(1000) --わざと待ち時間を入れてみる(非同期通信の利点がわかる)
どんどん変化する値を500msごとに取得してみます。
/test.htm
/FTLE/run.lua
/test.htm
<HTML> <div id="res">Respons</div> <script> function getmsg() { document.getElementById( "res" ).innerHTML = "Wait..."; var xhr = new XMLHttpRequest(); xhr.open("GET", "/FTLE/run.lua"); xhr.setRequestHeader("If-Modified-Since", "Thu, 01 Jan 1970 00:00:00 GMT"); //キャッシュさせないため xhr.timeout=3000; //通信失敗時は3秒でタイム・アウトするように xhr.onload = function(){ if (xhr.status == 200) { document.getElementById( "res" ).innerHTML = xhr.responseText; }else { document.getElementById( "res" ).innerHTML = "Error! " + xhr.status; } }; xhr.onerror = function(){document.getElementById( "res" ).innerHTML = "Error!"}; xhr.send(); } setInterval(getmsg,500); //500msごとに呼び出し </script> </HTML>
/FTLE/run.lua
local num --数値ファイルを読み込む local file = io.open("test.txt","r") if(file ~= nil)then --ファイルが存在しない場合は処理しない num = tonumber(file:read("*a")) file:close() end --もし中身が空だったら、0を入れる if(num == nil)then num=0 end --数値を更新する local file = io.open("test.txt","w") file:write(num + 1) file:close() --ブラウザに数値を返す print("HTTP/1.1 200 OK") print("") print("File:"..num)
ここが参考になるかもしれません。
Lua:実行中の停止と取得
Lua:実行中の停止と取得
コメントをかく