Javascript 使用AJAX调用从同一文件中将JS变量传递给PHP(使用EOD标记)
真的很难将JS变量传递给PHP变量。我知道如果不从客户机传递到服务器,这是无法实现的,因此我尝试通过AJAX调用传递变量 PHP文件似乎没有收到代码,因为传递的变量在AJAX调用后没有回音 这是我的代码,尽管最重要的元素就在最后。 我试图将JS变量'chosenStudent'传递回PHP文件Javascript 使用AJAX调用从同一文件中将JS变量传递给PHP(使用EOD标记),javascript,php,ajax,Javascript,Php,Ajax,真的很难将JS变量传递给PHP变量。我知道如果不从客户机传递到服务器,这是无法实现的,因此我尝试通过AJAX调用传递变量 PHP文件似乎没有收到代码,因为传递的变量在AJAX调用后没有回音 这是我的代码,尽管最重要的元素就在最后。 我试图将JS变量'chosenStudent'传递回PHP文件 $Content3 = <<<EOD <form id="myGroupSelectForm" method="post">
$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;
如果有人能帮助我,我将不胜感激。事情就是这样: 您可以在浏览器的地址栏中键入URL以向服务器发出请求 服务器运行一个PHP程序来响应该请求 浏览器在该响应中加载页面并在其中执行JS JS向URL发出Ajax请求 服务器运行一个PHP程序来响应该请求 浏览器使响应对JavaScript可用 你的JavaScript忽略了它 来自第4步的请求不会返回时间,并且不会使数据可用于第2步的PHP程序的执行,即使URL是相同的 如果您想加载一个全新的页面并在浏览器窗口中显示它,那么不要使用Ajax。使用常规表单提交 如果你想使用Ajax,那么设计你的API,让它只返回相关数据,通常你会返回JSON,然后写JavaScript来响应请求。您说过希望将所有内容都保存在一个PHP文件中,但这样可以更轻松地管理代码
我很困惑,这都是在一个文件,完全一样,还是有多个文件?我假设后者是因为返回,但这将有助于说明这一点。在访问变量之前,您将返回$Content3。将文件末尾的片段移到文件的顶部,或者尝试对访问变量的不同PHP文件执行AJAX请求。好的,这肯定是我犯的愚蠢错误。由于请求在return语句下,因此未执行。但是,将其移到更高的位置会产生一个未定义的变量消息。@ChrisHaas是的,这实际上是一个PHP文件。现在我希望它保持这样。我仍然不知道你想做什么。您是否正在尝试创建一个包含一些HTML和JS的页面,并且当有人对表单执行某些操作时,提交、更改某些内容,将数据发送到您的PHP文件进行解释并不重要?非常感谢@Quentin的帮助。多亏了你,我才开始了解这个问题。我个人不希望加载新页面,在本例中,我希望基于所选学生的用户ID以JavaScript呈现一个图形。因此,我认为最好的解决方法是添加JS代码,在相同的JS脚本中呈现图形。我会试一试,是的,我绝对应该把我的代码分离出来。你是对的!再次感谢!!再想一想,我确实需要将chosenStudent发送回PHP脚本。嗯…好吧,也许一个解决方案是用PHP做下拉列表?
$.post('WickCustomLD.php', {variable: chosenSudent}).then(function (data) {
// do something with the data
});