所以我有一个带有下拉列表的webform,以及一个需要填充一个非常简单的脚本结果的字段,该脚本将从下拉列表中选择的选项作为输入。 (Web服务器使用apache2和bash,以及用户端的一些js。就是这样。不幸的是,我无法在机器上安装任何其他东西。)
下拉菜单会自动正确填充。 当作为单独的bash脚本运行时,bash函数返回它应该的内容。
所有html片段都会插入到网页上并正确呈现。
问题似乎是因为我无法将下拉菜单中选择的值(由javascript函数处理)传递给bash脚本函数。
有什么想法吗?
有两个文本文件用作源,一个用于下拉菜单:
STUFF.txt:
蛋
乳
面粉
要填充的文本字段的另一个:
QUANTITY.txt:
egg 12unit
牛奶6Liters
面粉2Kg
下拉:
if [[ "$User" == "$Authorized" ]];then
echo "<td height=\"30\">$C_STUFF:</td><td colspan=\"3\" align=\"left\" cellpadding=\"0\"><select id=\"STUFF\" name=\"STUFF\" onChange=\"JS_stuff(this.value);\">"
STUFF=/apache2/cgi-bin/STUFF.txt
while IFS='' read -r line || [[ -n "$line" ]]; do
echo "<option id=\"$line\" name=\"STUFF\" value=\"$line\">$line</option>"
done < "$STUFF"
echo "</select>"
echo "</td><td> </td>"
fi
文字字段:
echo "<td></td>
<td>Quantity:</td>
<td colspan=\"3\"><text id=\"quantity\" size=\"15\" type=\"quantity\" name=\"quantity\" value=\"$STUFF\" ></text></td></tr>
Javascript功能:
/****STUFF for the text field**********/
function JS_stuff(sel)
{
var xhttp;
if (str.length == 0) {
document.getElementById("quantity").innerHTML = "";
return;
}
xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
document.getElementById("quantity").innerHTML = this.responseText;
}
};
xhttp.open("GET", "getquantity.sh?"+str, true);
xhttp.send();
}
Bash脚本&amp;功能:
SCRIPT:
#!/bin/bash
source ./functions.sh
getquantity $QUERY_STRING
functions.sh中的功能:
get_stuff_fromlist () {
STUFF="$QUERY_STRING"
QUANTITY=/apache2/cgi-bin/QUANTITY.txt
while IFS= read -r line; do
if [[ $line == $QUERY_STRING* ]] ; then
printline="yes"
fi
if [[ $printline == "yes" ]] ; then
QUANTITY= echo "$line" | awk '{print $2}'
fi
if [[ $line == $QUERY_STRING* ]] ; then
printline="no"
echo "$STUFF"
fi
done < "$QUANTITY"
}
答案 0 :(得分:0)
首先,一些通用评论。
至于你提到的问题。有两种可能的解决方案。
解决方案1 - 由于安全原因,不适合bash。
您需要有两个脚本。使用下拉列表生成webform的一个主要脚本。另一个,帮助者,接收作为参数的东西并返回数量。因此,您的javascript onChange
处理程序将使用XMLHttpRequest()
运行帮助程序脚本来获取数量。欢迎来到AJAX世界。该解决方案的明显缺点是帮助程序脚本由来自浏览器的数据提供,并且恶意用户可以欺骗请求以提供其自己的值。在帮助程序脚本中,您需要确保不会意外地运行此类流氓提供的代码。它在bash中很难,在其他脚本语言中也比较容易。
解决方案2
以包含javascript变量的方式准备webform,该变量是包含内容和数量的关联数组。 onChange
处理程序查找此表并适当填充数量。要开发所需的代码,您甚至可以编写一个包含所有数据编码的静态HTML文件。然后,当您对您的JavaScript解决方案感到满意时,请使用CGI脚本生成网页。这个解决方案很好,因为东西的数量很少(小的门槛取决于你)。它在客户端,在浏览器中运行,不向服务器发出任何其他请求。
PS。在脚本的下拉部分,您将关闭</select>
代码两次。