表book
包含:book_id
,book_title
表格bookext
包含:bookext_id
,book_id
(book
的签名密钥),bookext_tag
这是我想要填充下拉列表的脚本。
<script>
function get_bookextt() {
var request = $.ajax({
url: "getbookext.php",
type: "POST",
dataType: "html"
});
request.done(function(msg) {
$("#get_bookext").html(msg);
});
request.fail(function(jqXHR, textStatus) {
alert( "Request failed: " + textStatus );
});
}
</script>
看到该代码,这是我的第一个下拉列表的正文部分,它将关联必须出现的第二个下拉列表
<select id="book" name='book' onchange="get_bookextt();">
<option value=''>Select</option>
<?php while ($row = mysql_fetch_array($result)) {
echo "<option value='" . $row['book_id'] . "'>" . $row['book_title'] . "</option>";}
?>
</select>
<div id="get_bookext"></div>
我真的觉得在这里发布我的整个getbookext.php文件是愚蠢的,因为我认为这是我搞砸的地方。
<?php
include 'db_connection.php';
if ($_POST) {
$book_id = $_POST['book_id'];
if ($book_id != '') {
$sql1 = "SELECT * FROM bookext WHERE book_id=" . $book_id;
$result1 = mysql_query($sql1);
echo "<select name='bookext'>";
echo "<option value=''>Select</option>";
while ($row = mysql_fetch_array($result1)) {
echo "<option value='" . $row['bookext_id'] . "'>" . $row['bookext_tag'] . "</option>";}
echo "</select>";
}
else
{
echo '';
}
}
?>
请指出我哪里出错了。
- EDITED--
这是我的整个头部区域
include 'db_connection.php';
$sql = "SELECT * FROM book";
$result = mysql_query($sql);
?>
<script>
function get_bookextt() {
var request = $.ajax({
url: "getbookext.php",
type: "POST",
data: {'book_id', $(this).val()},
dataType: "html"
});
request.done(function(msg) {
$("#get_bookext").html(msg);
});
request.fail(function(jqXHR, textStatus) {
alert( "Request failed: " + textStatus );
});
}
</script>
虽然这是整个身体区域
<select id="book" name='book' onchange="get_bookextt($(this).val());">
<option value=''>Select</option>
<?php while ($row = mysql_fetch_array($result)) {
echo "<option value='" . $row['book_id'] . "'>" . $row['book_title'] . "</option>";}
?>
</select>
<div id="get_bookext"></div> // Sub will be appended here using ajax
PS1。我不明白为什么get_bookextt($(this).val());
在我的记事本++中没有突出显示。
答案 0 :(得分:1)
您的AJAX请求中没有book_id
,PHP需要返回数据http://api.jquery.com/jquery.ajax/。
所以你的JS函数应该像......
function get_bookextt(book_id) {
var request = $.ajax({
url: "getbookext.php",
type: "POST",
data: {'book_id': book_id},
dataType: "html"
});
request.done(function(msg) {
$("#get_bookext").html(msg);
});
request.fail(function(jqXHR, textStatus) {
alert( "Request failed: " + textStatus );
});
}
然后您的HTML应该在更改时发送值,因此将select替换为:
<select id="book" name='book' onchange="get_bookextt($(this).val());">
当我遇到AJAX请求问题时,我要做的第一件事就是在Chrome的开发者工具中查看请求。
这是一篇关于使用这些工具的文章,它是用IE编写的,但Chrome非常相似。 http://forums.asp.net/t/1982579.aspx?Using+the+browser+s+dev+tools+to+diagnose+ajax+problems+and+other+things+
您还应切换到PDO或mysqli,以便您使用预准备语句,因为不推荐使用mysql_。目前有两种限制注射可能性的方法。
POST
ID转换为int,因此必须是数字。选项1:
$book_id = (int)$_POST['book_id'];
选项2:
$book_id = mysql_real_escape_string($_POST['book_id']);
这是一个线程,当你切换如何防止这些。 How can I prevent SQL injection in PHP?
<强>更新强>
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="//code.jquery.com/jquery-1.11.3.min.js"></script>
</head>
<body>
<script type="text/javascript">
function get_bookextt(book_id) {
var request = $.ajax({
url: "getbookext.php",
type: "POST",
data: {'book_id': book_id},
dataType: "html"
});
request.done(function(msg) {
$("#get_bookext").html(msg);
});
request.fail(function(jqXHR, textStatus) {
alert( "Request failed: " + textStatus );
});
}
</script>
<select id="book" name='book' onchange="get_bookextt($(this).val());">
<option value=''>Select</option>
<option value='1'>test</option>
</select>
<div id="get_bookext"></div>
</body>
</html>