【发布时间】:2020-06-12 23:02:52
【问题描述】:
我有一个带有 wordpress 简码的 php 文件,当这个简码放在网页上时,它会正确地从 php 文件中调用一个 php 函数。
该函数在调用时会运行 SQL 查询以查找数据。
到目前为止,一切都是直截了当的。
这个来自 mysql 查询的数据(存储在 php 数组中)然后通过 JSON 转换为 JS 数组,然后用于填充下拉列表,该下拉列表使用 EOD 标记显示在网页上以显示JavaScript 下拉列表。
到目前为止一切都很好。
然后我用 JavaScript 编写了第二个下拉列表,它是根据用户在第一个下拉列表中所做的选择动态创建的。再次在同一 PHP 文件的 EOD 标记内。
现在是我不明白的部分。
我的问题是(我整天都被这个问题困扰)然后如何将所选项目的返回(从第二个下拉菜单)编程回 PHP 变量以进行进一步处理?
似乎不可能在一个 PHP 文件中完成所有这些操作,因为虽然我需要使用 Ajax 将 JS 下拉选择传递回 php 文件,但 php 文件已经被执行,因此会没注意退货。
因此,我的问题是,我的下一步是什么?
最终我希望一个 php 文件能够从第二个 JS 下拉列表中接收所选项目,以便它可以对返回的数据进行进一步处理。当网页的用户选择第二个下拉项时,如何让第二个 PHP 文件生效?如何让这个新的 PHP 文件接收选定的下拉项?
编辑*******
这是我的代码,虽然最重要的元素就在最后。 我正在尝试将 JS 变量“chosenStudent”传递回 PHP 文件。
$Content3 = <<<EOD
<form id="myGroupSelectForm" method="post">
<select id="selectGroup">
<option>Choose a Group</option>
</select>
<select id="selectStudent">
<option>Choose a Student</option>
</select>
</form>
<script type="text/javascript">
var select = document.getElementById("selectGroup");
var options = {$js_array_leadersGroupsName};
var i;
for(i = 0; i < options.length; i++) {
var opt = options[i];
var el = document.createElement("option");
el.textContent = opt;
el.value = opt;
select.appendChild(el);
}
</script>
<script>
var studentList = {$js_array_students_lists};
var select2 = document.getElementById("selectStudent");
var a = document.getElementById('selectGroup');
a.addEventListener('change', function() {
var i;
for(i = 0; i < options.length; i++) {
if ((this.value) == options[i]) {
var chosenStudentList = studentList[i];
}
}
var select = document.getElementById("selectStudent");
var length = select.options.length;
for (i = length-1; i >= 0; i--) {
select.options[i] = null;
}
var i;
for(i = 0; i < chosenStudentList.length; i++) {
var opt = chosenStudentList[i][0];
var el = document.createElement("option");
el.textContent = opt;
el.value = opt;
select2.appendChild(el);
}
}, false);
var b = document.getElementById('selectStudent');
b.addEventListener('change', function() {
var chosenSudent = this.value;
$.post('WickCustomLD.php', {variable: chosenSudent});
}, false);
</script>
EOD;
$Content3 .="\n";
if(!empty($_POST['variable'])) {
$chosenStudent = $_POST['variable'];
echo "<br>";
echo "<br>";
echo "<br>";
echo "<br>";
echo $chosenStudent;
}
return $Content3;
【问题讨论】:
-
尝试使用 AJAX,这是您将数据从主页发送回服务器的唯一方法。也许我错了,但我认为 Vue.js、React 或 Angular 可以做到这一点?
-
"php 文件应该已经被执行了",php 文件可以被执行多次并且可以调用多个php 文件。专门为此功能创建新的或重复使用旧的。这有帮助吗?
-
"php 文件已经被执行,因此不会注意到返回" 这无关紧要。每个请求都单独执行脚本。
-
酷,那么我如何获得相同的 PHP 文件来响应用户的选择?
-
您在提问时自己回答了这个问题——您需要 Ajax。 (这绝对不需要任何 JavaScript 框架,与之前的评论相反。)This discussion 可能有助于您了解发生了什么。
标签: javascript php