0

我有一个下拉菜单,它使用 onChange 事件触发 mysqli 查询。该查询使用返回的结果填充一个数组,然后将其分配给 $_SESSION 变量。

每当下拉菜单中的值发生更改时,我都会尝试使用存储在 $_SESSION 变量中的数组来填充选择框。

这是相关的 JavaScript 代码:

xmlhttp.open("POST", "getStudentList.php?q="+yearGroup, true); 
xmlhttp.send();


var newStudentList =<?php echo json_encode($_SESSION['studentList']) ?>; 

    // clear select box 
    $('#studentList').empty();          

    // populate select box with JS array items
    $.each(newStudentList, function(key, value) {   
         $('#studentList')
              .append($('<option>', { value : key })
              .text(value));
    });                     

    $('#studentList').selectmenu("refresh",true);

$_SESSION['studentList'] 正在“getStudentList.php”中正确更新,但在重新加载页面之前,更新不会反映在 Javascript 中的调用中......我怎样才能使更新自动发生?

我检查了过去的帖子,但没有发现任何真正有帮助或我理解的东西!如果有任何帮助,我将不胜感激 - 我是使用 Javascript / Jquery 的完全新手,并且从这里和那里拼凑了一些 php,所以请放轻松。(是的,我正在使用 session_start()!)

先感谢您!

4

2 回答 2

1

你可以做这样的事情,

$("#studentList").on('change',function() {
    $.ajax({
        url: "getStudentList.php",
        dataType: "json",
        success: function(newStudentList) {

           // clear select box 
           $('#studentList').empty();          

           // populate select box with JS array items
           $.each(newStudentList, function(key, value) {   
               $('#studentList').append($('<option>', { value : key }).text(value));
           });

           $('#studentList').selectmenu("refresh",true);

        }
    });
});
于 2013-04-09T21:09:32.037 回答
0

PHP 代码仅在生成 HTML 页面的源代码时运行。一旦浏览器运行了 JS 代码,PHP 就已经运行了,并且您echo已经生成了一个字符串,就像您手动键入一样。

为了运行更多 PHP 代码,您需要从服务器获取一个新文件。这是 AJAX 背后的基本概念:您编写一个 JS 函数,它向服务器请求一个新页面,通常包含 XML 或 JSON,但其他方面就像任何网页一样。但是,JS 回调函数不会显示新页面,而是读取它并执行您想要的操作。

于 2013-04-09T21:13:15.860 回答