如何在PHP中创建JavaScript可以处理的多维关联数组?
我正在编写一个与MySQL数据库交互的PHP脚本和一个使用AJAX调用从PHP脚本检索信息的JavaScript脚本如何在PHP中创建JavaScript可以处理的多维关联数组?,php,javascript,jquery,ajax,Php,Javascript,Jquery,Ajax,我正在编写一个与MySQL数据库交互的PHP脚本和一个使用AJAX调用从PHP脚本检索信息的JavaScript脚本 我想做的是创建一个框,其中我的主题是,而课程是主题中的课程 我目前拥有的是一个JS脚本,虽然Firebug中没有控制台错误,但它根本不进行处理 我编写了以下SQL语句: $sql = "SELECT s.Title AS Subject, s.Subject_ID AS Subject_ID, c.Title AS Course, c.Cour
我想做的是创建一个
框,其中我的主题是
,而课程是主题中的课程
我目前拥有的是一个JS脚本,虽然Firebug中没有控制台错误,但它根本不进行处理
我编写了以下SQL语句:
$sql = "SELECT
s.Title AS Subject,
s.Subject_ID AS Subject_ID,
c.Title AS Course,
c.Course_ID AS Course_ID
FROM
subjects s
LEFT JOIN courses c ON s.Subject_ID = c.Subject_ID
WHERE s.Faculty_ID = $faculty";
如果$faculty==1
,则返回以下数据:
然后,我使用以下代码返回多维数组,其中主题
级别包含该主题的课程
:
$res = mysql_query( $sql );
while ( $row = mysql_fetch_assoc( $res ) ) {
$return[$row["Subject_ID"]][] = array( "Course_ID" => $row["Course_ID"], "Title" => $row["Course"] );
}
print_r( $return );
EDIT:我意识到print\u r
无法将信息发送到我的JS脚本(我已经为此设置了一个return$return
),我只是将其用于调试目的
完整的PHP函数如下所示:
switch($_GET["cmd"]) {
case "populateForm" :
$return = json_encode( populateForm() );
break;
case "populateCourses" :
$return = json_encode( populateCourses( $_GET["faculty"] ) );
break;
}
echo $return;
Array
(
[8] => Array
(
[0] => Array
(
[Course_ID] => 59
[Title] => Core ICT
)
[1] => Array
(
[Course_ID] => 60
[Title] => BTEC Business
)
[2] => Array
(
[Course_ID] => 61
[Title] => BTEC ICT
)
[3] => Array
(
[Course_ID] => 62
[Title] => GCSE Business
)
[4] => Array
(
[Course_ID] => 63
[Title] => GCSE ICT
)
)
[9] => Array
(
[0] => Array
(
[Course_ID] => 64
[Title] => Advance BTEC Business
)
[1] => Array
(
[Course_ID] => 65
[Title] => Advance BTEC ICT
)
[2] => Array
(
[Course_ID] => 66
[Title] => AS Applied Business
)
[3] => Array
(
[Course_ID] => 67
[Title] => AS Applied ICT
)
[4] => Array
(
[Course_ID] => 68
[Title] => A2 Applied Business
)
[5] => Array
(
[Course_ID] => 69
[Title] => A2 Applied ICT
)
[6] => Array
(
[Course_ID] => 70
[Title] => A2 Economics
)
[7] => Array
(
[Course_ID] => 71
[Title] => A2 Law
)
[8] => Array
(
[Course_ID] => 72
[Title] => GCSE Maths
)
[9] => Array
(
[Course_ID] => 73
[Title] => Maths
)
[10] => Array
(
[Course_ID] => 74
[Title] => AS Further Maths
)
[11] => Array
(
[Course_ID] => 75
[Title] => AS Maths
)
[12] => Array
(
[Course_ID] => 76
[Title] => GSE Maths Rs-Sit
)
[13] => Array
(
[Course_ID] => 77
[Title] => A2 Further Maths
)
[14] => Array
(
[Course_ID] => 78
[Title] => A2 Maths
)
)
)
-
其中的数据如下所示:
switch($_GET["cmd"]) {
case "populateForm" :
$return = json_encode( populateForm() );
break;
case "populateCourses" :
$return = json_encode( populateCourses( $_GET["faculty"] ) );
break;
}
echo $return;
Array
(
[8] => Array
(
[0] => Array
(
[Course_ID] => 59
[Title] => Core ICT
)
[1] => Array
(
[Course_ID] => 60
[Title] => BTEC Business
)
[2] => Array
(
[Course_ID] => 61
[Title] => BTEC ICT
)
[3] => Array
(
[Course_ID] => 62
[Title] => GCSE Business
)
[4] => Array
(
[Course_ID] => 63
[Title] => GCSE ICT
)
)
[9] => Array
(
[0] => Array
(
[Course_ID] => 64
[Title] => Advance BTEC Business
)
[1] => Array
(
[Course_ID] => 65
[Title] => Advance BTEC ICT
)
[2] => Array
(
[Course_ID] => 66
[Title] => AS Applied Business
)
[3] => Array
(
[Course_ID] => 67
[Title] => AS Applied ICT
)
[4] => Array
(
[Course_ID] => 68
[Title] => A2 Applied Business
)
[5] => Array
(
[Course_ID] => 69
[Title] => A2 Applied ICT
)
[6] => Array
(
[Course_ID] => 70
[Title] => A2 Economics
)
[7] => Array
(
[Course_ID] => 71
[Title] => A2 Law
)
[8] => Array
(
[Course_ID] => 72
[Title] => GCSE Maths
)
[9] => Array
(
[Course_ID] => 73
[Title] => Maths
)
[10] => Array
(
[Course_ID] => 74
[Title] => AS Further Maths
)
[11] => Array
(
[Course_ID] => 75
[Title] => AS Maths
)
[12] => Array
(
[Course_ID] => 76
[Title] => GSE Maths Rs-Sit
)
[13] => Array
(
[Course_ID] => 77
[Title] => A2 Further Maths
)
[14] => Array
(
[Course_ID] => 78
[Title] => A2 Maths
)
)
)
然而,一旦我使用JavaScript,我就不知道如何将这些数据处理到我要查找的
框中请注意数据接收正确。如果我在这个函数中console.log(data)
,它会像预期的那样显示我的PHP脚本发送的所有数据
我正在尝试这个:
$('#courses').on("click", "option", function(event) {
var id = $(this).val();
UWA.Data.getJson(Input.URL + '?cmd=populateCourses&faculty=' + id, Input.populateCourses);
})
}
Input.populateCourses = function(data) {
$('#courses').empty();
for (var i = 0; i < data.length; i++) {
alert(data[i]);
$('#courses').append('<optgroup label="' + data[i] + '>');
for (var x = 0; x < data[i].length; x++) {
$('#courses').append('<option value="' + data[i][x].Course_ID + '">' + data[i][x].Title + '</option>');
}
$('#courses').append('</optgroup>');
}
}
$(“#课程”)。在(“单击”,“选项”,函数(事件){
var id=$(this.val();
UWA.Data.getJson(Input.URL+'?cmd=populateCourses&faculty='+id,Input.populateCourses);
})
}
Input.populateCourses=函数(数据){
$(“#课程”).empty();
对于(变量i=0;i $(“#courses”).append(“使用而不是print\r()
使用而不是print\r()
您想要json\u encode
您的PHP数组。JS不知道如何处理该字符串输出
然后,在JS端,您需要JSON.parse
将文本解析为一个JS对象,您可以正常使用它
如果在IE6/7中也需要它,那么需要在页面上显示Douglas Crockford的json2.js。
如果您不支持GhettoIE,那么您就不支持了。如果您想json\u编码
您的PHP数组,JS将不知道该如何处理该字符串输出
然后,在JS端,您需要JSON.parse
将文本解析为一个JS对象,您可以正常使用它
如果在IE6/7中也需要它,那么需要在页面上显示Douglas Crockford的json2.js。
如果您不支持GhettoIE,那么您就不支持。如果您正确地重新保存了数据,那么就没有必要向我们展示所有的php代码
我很确定你要看的功能是:
Input.populateCourses = function(data) {
$('#courses').empty();
for (var i = 0; i < data.length; i++) {
alert(data[i]);
$('#courses').append('<optgroup label="' + data[i] + '>');
for (var x = 0; x < data[i].length; x++) {
$('#courses').append('<option value="' + data[i][x].Course_ID + '">' + data[i][x].Title + '</option>');
}
$('#courses').append('</optgroup>');
}
}
Input.populateCourses=函数(数据){
$(“#课程”).empty();
对于(变量i=0;i
解决方案二:
Input.populateCourses = function(data) {
var $courses = $('#courses').empty();
var $optgroup;
for (var i = 0; i < data.length; i++) {
$optgroup = $('<optgroup label="' + data[i] + '>').appendTo($courses);
for (var x = 0; x < data[i].length; x++) {
$('<option value="' + data[i][x].Course_ID + '">' + data[i][x].Title + '</option>').appendTo($optgroup);
}
}
}
Input.populateCourses=函数(数据){
var$courses=$('#courses').empty();
var$optgroup;
对于(变量i=0;i $optgroup=$('如果您正确地重新保存了数据,则无需向我们显示所有php代码
我很确定你要看的功能是:
Input.populateCourses = function(data) {
$('#courses').empty();
for (var i = 0; i < data.length; i++) {
alert(data[i]);
$('#courses').append('<optgroup label="' + data[i] + '>');
for (var x = 0; x < data[i].length; x++) {
$('#courses').append('<option value="' + data[i][x].Course_ID + '">' + data[i][x].Title + '</option>');
}
$('#courses').append('</optgroup>');
}
}
Input.populateCourses=函数(数据){
$(“#课程”).empty();
对于(变量i=0;i
解决方案二:
Input.populateCourses = function(data) {
var $courses = $('#courses').empty();
var $optgroup;
for (var i = 0; i < data.length; i++) {
$optgroup = $('<optgroup label="' + data[i] + '>').appendTo($courses);
for (var x = 0; x < data[i].length; x++) {
$('<option value="' + data[i][x].Course_ID + '">' + data[i][x].Title + '</option>').appendTo($optgroup);
}
}
}
Input.populateCourses=函数(数据){
var$courses=$('#courses').empty();
var$optgroup;
对于(变量i=0;i
Input.populateCourses = function(data) {
$('#courses').empty();
for (var i in data) {
alert(data[i]);
/*...*/
}
}
data
是php中的一个关联数组,它在javascriptfor(数据中的变量i)中转换为具有数字属性的对象
将迭代对象的属性。没有尝试过,但我猜问题在于您的数据不是一个基于零的数组,索引不是0,1,2,3等,因此循环不起作用。您应该尝试以下方法:
Input.populateCourses = function(data) {
$('#courses').empty();
for (var i in data) {
alert(data[i]);
/*...*/
}
}
data
是php中的一个关联数组,它在javascriptfor(数据中的变量i)中转换为具有数字属性的对象
将迭代对象的属性。,谢谢,但这不是问题所在-我已经更新了我的代码以澄清问题。我最初留下了一些调试代码,使问题严重混淆@Ben:(@dunc.谢谢你的诚实。尽管如此,这是一个非常彻底的问题;如果有什么值得投票的话,谢谢,但这不是问题所在-我已经更新了我的代码来澄清。我最初留下了一些调试代码,其中显着混淆了问题@Ben:(@dunc.谢谢你的诚实。不过,这是一个非常彻底的问题;如果有什么值得投票的话。请重新阅读我的帖子,我在你添加答案之前做了更改。print\u r
纯粹是为了调试。@dunc“我意识到print\r不能将信息发送到我的JS脚本”声明,您使用print\r
的目的是向JS发送数据;在我发布此答案之前,问题中没有任何其他信息可见……还有问题标题“如何创建mul?”