Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何通过AJAX传递的URL从mysql请求数据_Php_Jquery_Mysql_Ajax_Pdo - Fatal编程技术网

Php 如何通过AJAX传递的URL从mysql请求数据

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

我正在创建一个显示产品列表的页面,并希望能够按类别进行筛选、拥有页面、每页项目限制和排序顺序

在store页面上,我执行一个数据库调用来生成所有类别,并将它们放在侧边栏中

然后单击/change,使用$(“#form”)序列化表单上的所有日期。serialize()然后将其传递给request_handler.php,后者将返回正确的数据

问题是,因为这些都是POST数据,所以没有URL引用,所以人们将无法链接到他们选择的结果,类似于- 此外,您将无法来回切换,因为这都是AJAX。我可能可以用history JS解决这个问题,但我不确定如何使用url来获得所需的结果

<?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设置这些参数,然后重新加载

我强烈建议您尝试某种模板引擎。这将使您的代码更加清晰和一致。

是的,您确实希望这样做。请参见“推送/弹出状态”部分和一个有用的示例。确保检测到浏览器兼容性。