下面包含HTML,AJAX和PHP。在介绍AJAX之前,所有功能都是(从下面的HTML中删除了表单标签和PHP处理值)。
从MySQL查询中填充下拉列表(类别)。当用户选择一个选项时,我想通过ajax将ID传递给PHP脚本(index.php)来运行MySQL查询以填充另一个下拉列表(子类别)。
Chrome控制台日志表明ajax正在正确传递ID。
Firebug还显示它正在传递并且URL正确(index.php?business_category_id = ajax-passed value)。如果传递GET变量,并且我的PHP脚本正在寻找它,为什么脚本没有响应?为什么没有收到价值?我无法回应它,所以我知道它没有收到。
ajax脚本在js / script.js中,index.php(我的控制器)在根目录中,而带有html(buy-a-biz.php)的页面在根目录中并包含在php中脚本(见下文)。
如果有人可以提供帮助,我会非常感激。我是使用jQuery ajax的新手。
HTML
<select name="category" id="business-category">
<option value="all_categories">Select category</option>
<?php foreach ($categories as $category): ?>
<option value="<?php htmlout($category['id']); ?>"><?php htmlout($category['name']); ?></option>
<?php endforeach; ?>
</select>
AJAX。我也尝试使用$ .get和$ .post。
$(document).ready(function(){
$("#business-category").change(function(){
var category_id = $(this).val();
console.log(category_id);
$.ajax({
type: 'GET',
url: 'index.php',
data: { business_category_id: category_id },
success: function(category_id){
$("#result").html(category_id + ' submitted successfully!');
}
});
});
});
PHP。
if(isset($_GET['business_category_id'])){
$category_id = htmlspecialchars($_GET['business_category_id']);
include 'includes/dbconnect.php';
try {
$sql = "SELECT * FROM sub_category
WHERE category_id = :category_id";
$s = $db->prepare($sql);
$s->bindValue(":category_id", $category_id);
$s->execute();
while($row = $s->fetch(PDO::FETCH_ASSOC)){
$sub_categories[] = array(
'id' => $row['id'],
'category_id' => $row['category_id'],
'name' => $row['name']
);
}
$sql2 = "SELECT * FROM category";
$s2 = $db->prepare($sql2);
$s2->execute();
while($row = $s2->fetch(PDO::FETCH_ASSOC)){
$categories[] = array(
'id' => $row['id'],
'name' => $row['name'],
);
}
}
catch (PDOException $e) {
$errMsg = "Error fetching data" . $e->getMessage();
include 'error.html.php';
exit();
}
include 'buy-a-biz.php';
exit();
}
答案 0 :(得分:1)
您正在将done
回调传递给$.ajax
。您应该将此回调命名为success
$.ajax({
type: 'GET',
url: 'index.php',
data: { business_category_id: category_id },
success: function(category_id){
$("#result").html(category_id + ' submitted successfully!');
}
});
或对done
返回的承诺调用$.ajax
:
$.ajax({
type: 'GET',
url: 'index.php',
data: { business_category_id: category_id },
}).done(function(category_id) {
$("#result").html(category_id + ' submitted successfully!');
});