MySQLデータベースと対話するPHPスクリプトと、AJAX呼び出しを使用してPHPスクリプトから情報を取得するJavaScriptスクリプトを作成しています。
私がやろうとしているのは、私が主題の中にある<select>
ボックスを作成することです。Subjects
<optgroup label="Subject">
Courses
<option value="1">Course</option>
私が現在持っているのは、Firebugにコンソールエラーはありませんが、単に処理されないJSスクリプトです。
私はこの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
、このデータを返します。
Subject
次に、次のコードを使用して、レベルにそのサブジェクトが含まれている多次元配列を返しますCourses
。
$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 );
編集print_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;
-
function populateCourses( $faculty ) {
$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";
$res = mysql_query( $sql );
while ( $row = mysql_fetch_assoc( $res ) ) {
$return[$row["Subject_ID"]][] = array( "Course_ID" => $row["Course_ID"], "Title" => $row["Course"] );
}
return $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
)
)
)
<SELECT>
ただし、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>');
}
}
で#courses
あると<select id="courses"></select>
。
for
JSスクリプトでこれらのループを記述した方法は、データがアクセス/検出されていないことを意味しているため、スクリプトが失敗していると推測しています。
SQLステートメントから返されたデータを操作して<select>
必要なボックスを生成するための最良の方法は何ですか?または、SQLステートメントを改善して作業を簡単にする必要がありますか?
前もって感謝します、