Php 无法使用AJAX在PDO中获取用于产品筛选的数据
无法使用Php 无法使用AJAX在PDO中获取用于产品筛选的数据,php,jquery,filter,Php,Jquery,Filter,无法使用PDOamdAJAX筛选产品 下面的代码使用PDO和AJAX加载数据表单sql,但当我尝试基于品牌进行过滤时,它不起作用。尝试了调试var\u dump方法,但没有任何帮助 有人能帮我解决,我如何过滤产品,代码中有什么遗漏吗 HTML <div class="md-radio my-1"> <input type="radio" class="filter_all cate" name="cate" id="<?php echo str_replace(
PDO
amdAJAX
筛选产品
下面的代码使用PDO
和AJAX
加载数据表单sql
,但当我尝试基于品牌进行过滤时,它不起作用。尝试了调试var\u dump
方法,但没有任何帮助
有人能帮我解决,我如何过滤产品,代码中有什么遗漏吗
HTML
<div class="md-radio my-1">
<input type="radio" class="filter_all cate" name="cate" id="<?php echo str_replace(' ', '', $row['sca']); ?>" value="<?php echo $row['sca'] ?>">
<label for="<?php echo str_replace(' ', '', $row['sca']); ?>">
<?php echo $row['sca']; ?>
</label>
</div>
脚本
$(document).ready(function () {
var flag = 0;
var fetching = false;
var done = false;
function filter_data() {
// prevent concurrent requests
if (fetching === true) {
return;
}
fetching = true;
var data = {
action: 'fetch_data',
cate: get_filter('cate'),
brand: get_filter('brand'),
model: get_filter('model'),
sort: get_filter('sort'),
date: get_filter('date'),
offset: flag,
limit: 4
};
console.log($.param(data));
$.ajax({
url: "fetch.php?" + $.param(data),
type: 'POST'
})
.done(function (data) {
console.log('data received');
$('.filter_data').append(data); // append
// we reached the end, no more data
if (data === '<h3>No Data Found</h3>') {
done = true;
}
flag += 4;
fetching = false; // allow further requests again
})
.fail(function (error) {
console.log('An error occurred while fetching', error)
// TODO: some error handling
});
}
function get_filter(class_name) {
var filter = [];
$('.' + class_name + ':checked').each(function () {
filter.push($(this).val());
});
return filter;
}
$('.filter_all').click(function () {
filter_data();
});
filter_data(); // commented out for debugging purpose
var $window = $(window);
var $document = $(document);
$window.scroll(function () {
if ((window.innerHeight + window.scrollY) >= document.body.offsetHeight - 300 && fetching === false && done === false) {
console.log('infinite scroll');
filter_data();
}
});
});
$(文档).ready(函数(){
var标志=0;
var取数=false;
var done=false;
函数过滤器_数据(){
//防止并发请求
如果(获取===true){
返回;
}
取数=真;
风险值数据={
操作:“获取_数据”,
cate:get_filter('cate'),
品牌:获取过滤器(“品牌”),
模型:获取过滤器(“模型”),
排序:获取过滤器(“排序”),
日期:获取过滤器(“日期”),
偏移量:标志,
限额:4
};
console.log($.param(数据));
$.ajax({
url:“fetch.php?”+$.param(数据),
类型:“POST”
})
.完成(功能(数据){
console.log(“接收到的数据”);
$('.filter_data').append(data);//append
//我们到达终点,没有更多的数据
如果(数据=='未找到数据'){
完成=正确;
}
flag+=4;
fetching=false;//再次允许进一步请求
})
.失败(功能(错误){
console.log('提取时出错',错误)
//TODO:一些错误处理
});
}
函数get_filter(类名称){
var过滤器=[];
$('.'.+类名称+':选中')。每个(函数(){
filter.push($(this.val());
});
回流过滤器;
}
$('.filter_all')。单击(函数(){
过滤数据();
});
filter_data();//出于调试目的注释掉
变量$window=$(window);
var$document=$(文档);
$window.scroll(函数(){
if((window.innerHeight+window.scrollY)>=document.body.offsetHeight-300&&fetching==false&&done==false){
log(“无限滚动”);
过滤数据();
}
});
});
PHP
<?php
include("$_SERVER[DOCUMENT_ROOT]/include/config.php");
include("$_SERVER[DOCUMENT_ROOT]/include/function.php");
$query = "SELECT * FROM allpostdata WHERE sts = '1' AND mca='Vehicle'";
if (!empty($_GET['cate'])) {
$query .= " AND sca IN (" . str_repeat("?,", count($_GET['cate']) - 1) . "?)";
} else {
$_GET['cate'] = []; // in case it is not set
}
if (!empty($_GET['brand'])) {
$query .= " AND product_brand IN (" . str_repeat("?,", count($_GET['brand']) - 1) . "?)";
} else {
$_GET['brand'] = []; // in case it is not set
}
if (!empty($_GET['model'])) {
$query .= " AND mdl IN (" . str_repeat("?,", count($_GET['model']) - 1) . "?)";
} else {
$_GET['model'] = []; // in case it is not set
}
if (empty($_GET['sort']) || $_GET['sort'][0] == "date") {
$query .= " ORDER BY pdt DESC";
} elseif ($_GET["sort"][0] == "ASC" || $_GET["sort"][0] == "DESC") {
$query .= " ORDER BY prs " . $_GET['sort'][0];
}
if (isset($_GET['limit'])) {
if (!empty($_GET['offset'])) {
$query .= " LIMIT " . $_GET['limit'] . " OFFSET " . $_GET['offset'];
} else {
$query .= " LIMIT " . $_GET['limit'];
}
}
$stmt = $conn->prepare($query);
$params = array_merge($_GET['cate'], $_GET['brand'], $_GET['model']);
$stmt->execute($params);
$result = $stmt->fetchAll();
$total_row = $stmt->rowCount();
$output = '';
if ($total_row > 0) {
foreach ($result as $row) {
$parameter = $row['pid'];
$hashed = md5($salt . $parameter);
$output .= '<a href="/single_view.php?p=' . $row['id'] . '" class="w-xl-20 w-lg-20 col-md-3 col-6 p-1 p-lg-2">
<div class="card border-0 small">
<img class="card-img-top rounded-0" src="/upload/thumb/' . $row["im1"] . '" alt="Card image cap">
<div class="card-body pb-0 pt-2 px-0">
<h6 class="card-title text-dark text-truncate">' . ucfirst(strtolower($row['tit'])) . '</h6>
<h6 class="card-subtitle mb-1 text-muted text-truncate small">' . $row['product_brand'] . ' / ' . $row['mdl'] . '</h6>
<p class="card-text"><strong class="card-text text-dark text-truncate">₹ ' . $row['prs'] . '</strong></p>' . timeAgo($row['pdt']) . '
</div>
</div>
</a>';
}
} else {
$output = '<h3>No Data Found</h3>';
}
echo $output;
?>
尽管将ajax调用定义为post,但您仍然通过GET查询参数发送数据。这是一种安全风险。尝试将AJAX调用更改为类似的内容,并将您的$\u GET
stuff替换为$\u POST
$.ajax({
url: '/your-form-processing-page-url-here',
type: 'POST',
data: data,
mimeType: 'multipart/form-data',
success: function(data, status, jqXHR){
alert('Hooray! All is well.');
console.log(data);
console.log(status);
console.log(jqXHR);
},
error: function(jqXHR,status,error){
// Hopefully we should never reach here
console.log(jqXHR);
console.log(status);
console.log(error);
}
});
您使用的是类型:'POST'
,因此$\u GET
中不会有任何内容,请改用$\u POST
<代码>变量转储($\u POST)代码>在PHP的顶部,以确保您正确发送。@JayBlanchard,但我可以获得offset
和limit
值,哪些值可以console.log($.param(data))代码>返回?查询字符串的构造是否正确?@JayBlanchard在控制台中
我可以看到查询,但所选值没有在query中传递。是否所有表单元素都具有正确的名称属性或正确的类属性?这是我在var\u dump($\u POST)中得到的结果代码>array(3){[“action”]=>string(10)“fetch_data”[“offset”]=>string(1)“0”[“limit”]=>string(1)”4}
无法在var_dump
console.log(data)中找到所选值;在发送之前,请仔细检查发送的值