Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/474.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用AJAX调用从同一文件中将JS变量传递给PHP(使用EOD标记)_Javascript_Php_Ajax - Fatal编程技术网

Javascript 使用AJAX调用从同一文件中将JS变量传递给PHP(使用EOD标记)

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">

真的很难将JS变量传递给PHP变量。我知道如果不从客户机传递到服务器,这是无法实现的,因此我尝试通过AJAX调用传递变量

PHP文件似乎没有收到代码,因为传递的变量在AJAX调用后没有回音

这是我的代码,尽管最重要的元素就在最后。 我试图将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;  

如果有人能帮助我,我将不胜感激。

事情就是这样:

您可以在浏览器的地址栏中键入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
});