Php 如何通过AJAX传递的URL从mysql请求数据
我正在创建一个显示产品列表的页面,并希望能够按类别进行筛选、拥有页面、每页项目限制和排序顺序 在store页面上,我执行一个数据库调用来生成所有类别,并将它们放在侧边栏中 然后单击/change,使用$(“#form”)序列化表单上的所有日期。serialize()然后将其传递给request_handler.php,后者将返回正确的数据 问题是,因为这些都是POST数据,所以没有URL引用,所以人们将无法链接到他们选择的结果,类似于- 此外,您将无法来回切换,因为这都是AJAX。我可能可以用history JS解决这个问题,但我不确定如何使用url来获得所需的结果Php 如何通过AJAX传递的URL从mysql请求数据,php,jquery,mysql,ajax,pdo,Php,Jquery,Mysql,Ajax,Pdo,我正在创建一个显示产品列表的页面,并希望能够按类别进行筛选、拥有页面、每页项目限制和排序顺序 在store页面上,我执行一个数据库调用来生成所有类别,并将它们放在侧边栏中 然后单击/change,使用$(“#form”)序列化表单上的所有日期。serialize()然后将其传递给request_handler.php,后者将返回正确的数据 问题是,因为这些都是POST数据,所以没有URL引用,所以人们将无法链接到他们选择的结果,类似于- 此外,您将无法来回切换,因为这都是AJAX。我可能可以用h
<?php
// Database config file, db login settings
require_once '../inc/dbconfig.php';
try {
// connect to database;
$conn = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt_all_results = $conn->prepare('SELECT * FROM films ORDER BY category ASC');
$stmt_all_results->execute();
?>
<!DOCTYPE html>
<html lang="en">
<head>
<title>Document</title>
</head>
<body>
<form id="store">
<ul>
<?php
$category = null;
while($r = $stmt_all_results->fetch()){
if ($category != $r['category']) {
$category = $r['category'];
echo '<li>
<label for="cat-' . $category . '">
<input type="checkbox" name="cat[]" id="cat-'. $category .'" value="' . $category . '">'
. $category .
'</label>
</li>';
}
}
?>
</ul>
</form>
<div class="result"></div>
<?php
// close try
} catch(PDOException $e) {
echo 'ERROR: ' . $e->getMessage();
}
?>
<!-- LOAD JQUERY -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script>
function get_data(dat){
$.post( "request_handler.php", dat)
.done(function( data ) {
$( ".result" ).html( data );
});
}
$('li').change(function(){
var dat = $('#store').serialize();
get_data(dat);
})
</script>
文件
函数获取数据(dat){
$.post(“request_handler.php”,dat)
.完成(功能(数据){
$(“.result”).html(数据);
});
}
$('li').change(函数(){
var dat=$('#store').serialize();
获取数据(dat);
})
请求处理程序脚本
<?php
// Database config file
require_once '../inc/dbconfig.php';
$category =$_POST['cat'];
foreach ($category as $i){
$options[] = "category='" . $i ."'";
}
$sql = "SELECT * FROM databse";
if (count($options)){
$sql .= " WHERE " . implode(' OR ', $options);
}
try {
// connect to database;
$conn = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt_all_results = $conn->prepare($sql);
$stmt_all_results->execute();
# default
$get_pages = isset($_GET['page']) ? $_GET['page'] : 1;
while($row = $stmt_all_results->fetch()) {
$product_title = $row['title'];
$product_image = $row['image_src'];
$product_category = $row['category'];
$product_id = $row['id'];
?>
<ul>
<li>
<img src="<?php echo $product_image; ?>">
<h4><?php echo $product_title; ?></h4>
<p><?php echo $product_category; ?></h4>
<a href="product?id=<?php echo $product_id; ?>">More Info</a>
</li>
</ul>
<?php
}
} catch(PDOException $e) {
echo 'ERROR: ' . $e->getMessage();
}
?>
如今,将php与html/js/css混合使用是一种不好的做法。必须具备某种框架和模板(逻辑和数据表示分离)
用于数据处理的交互式客户端应用程序应该使用合适的工具构建,比如angular.js、ember.js等等。如果您试图在原始JavaScript中实现这一点,甚至使用jQuery,您肯定会在该应用程序的开发和支持方面遭受很大的损失
如果您不想把自己和客户端框架混为一谈,更喜欢老式的方式,我建议您看看名为jqGrid的jQuery插件。它内置了排序、过滤、分页等功能,但无论如何,您都需要在服务器端做很多工作
此外,如果希望在URL中传递排序/筛选/页码参数,则必须正确初始化网格,使用网格API设置这些参数,然后重新加载
我强烈建议您尝试某种模板引擎。这将使您的代码更加清晰和一致。是的,您确实希望这样做。请参见“推送/弹出状态”部分和一个有用的示例。确保检测到浏览器兼容性。