0

所以我有多个网页,都包含相同的搜索表单。现在我想在用户开始输入时,加载带有结果列表的页面,替换当前页面,然后查询并显示找到的所有项目。我怎么能用ajax做到这一点?当我转到结果页面(另一个 .php 页面)时,我无法真正显示结果。

例如,我的索引页上有这个表格:

<form action='films.php' method='get' id='zoekform'>
    <input id="ZoekBalkSearch" type="search" name="zoekparameter" placeholder="Geef een zoekterm in."/>
    <input id="ZoekButton" type="submit" value="Zoek"/>
</form>

我有一个页面,列出了在我的 movies.php 页面上搜索的电影:

//controlleer of er een zoekparameter meegegeven is
            if(!isset($_GET['zoekparameter']))
            {
                //haal alle films op gesorteerd volgens naam indien er geen zoekparameter meegegeven is
                $query=$connection->prepare("SELECT id,filmnaam,filmjaar,regisseur,acteurs,posterlink FROM films ORDER BY filmnaam;");
            }
            else if ($_GET['zoekparameter']!='')
            {
                //anders haal de zoekparameter op
                $tezoeken=$_GET['zoekparameter'];
                //controleer ook of er misschien naar een jaar gezocht is en sla deze variabele op in $jaar
                $jaar=intval($tezoeken);
                //voeg eventuele extra karakters toe aan de zoekquery
                $tezoeken='%'.$tezoeken.'%';

                //zoek in de database (gebruik ook bindparams als beveiliging tegen sql injection)
                $query=$connection->prepare("SELECT id,filmnaam,filmjaar,regisseur,acteurs,posterlink FROM films WHERE filmnaam ILIKE :zoek OR regisseur ILIKE :zoek OR acteurs ILIKE :zoek OR filmjaar=:jaar ORDER BY filmnaam;");

                $query->bindParam(':zoek',$tezoeken,PDO::PARAM_STR);
                $query->bindParam(':jaar',$jaar,PDO::PARAM_INT);
            }
            $query->execute();

            //geef alle gevonden films terug in de table
            while($row=$query->fetch(PDO::FETCH_BOTH))
            {
            $id=$row[0];
            $filmnaam=$row[1];
            $filmjaar=$row[2];
            $regisseur=$row[3];
            $acteurs=$row[4];
            $poster=$row[5];

            echo "<tr><td><a href='moviePage.php?id=$id'><img class='miniposter' src='$poster' alt='De poster van de film'/></a></td><td><a href='moviePage.php?id=$id'><strong>$filmnaam</strong></a></td><td><a href='moviePage.php?id=$id'>$filmjaar</a></td><td><a href='moviePage.php?id=$id'>$regisseur</a></td><td><a href='moviePage.php?id=$id'>$acteurs</a></td></tr>";
            }
            ?>

提前致谢

4

2 回答 2

2

我建议您在键入时使用 ajax 查询,然后在当前页面的专用容器中显示结果。然后,当用户点击“提交”时,他仍然可以进入结果页面。

这是一个代码提示,向您展示这个概念(它需要适应和改进):

首先,在当前页面上添加一个 HTML 占位符:

<div id="resultPlaceHolder"></div>

然后,每次在输入字段中(在现有代码中)键入新字母时,都会触发搜索。

processingPage.php 中的代码(它是您可能创建的新文件)与您显示的大致相同,除了您需要输出数据:return 或 echo ...

不要忘记您的查询字符串将在$_POST['queryString']var 中。

$("#ZoekBalkSearch").keyUp(function() {
   $("#resultPlaceHolder").empty();

   //No need to query over an empty query string
   if ($("#ZoekBalkSearch").val() != "") {
      $.ajax({
         type: "POST",
         url: "processingPage.php",
         data: {
             queryString: $("#ZoekBalkSearch").val()
         },
         success: function(data) {
            //Parse data - if you chose JSON data response, for example

            //Append the data in the placeHolder
            $("#resultPlaceHolder").append(data);
         }
      });
   }
});

希望这对您有所帮助,并让您对该怎么做有所了解。当然,您可以通过在输入上设置条件和计时器来改进,这样 ajax 请求就不会一直触发,等等。

于 2013-07-25T12:53:26.583 回答
1

如果您有数据库,那么您可以使用 jquery 将结果显示在与 google 相同的页面中。

这是您可以使用 Ajax、PHP 和 JQuery 执行的操作。希望这有助于或给你一个开始。

在此处查看现场演示和源代码。

http://purpledesign.in/blog/to-create-a-live-search-like-google/

创建一个搜索框,可能是这样的输入字段。

<input type="text" id="search" autocomplete="off">

现在我们需要听用户在文本区域输入的任何内容。为此,我们将使用 jquery live() 和 keyup 事件。在每个 keyup 上,我们都有一个 jquery 函数“search”,它将运行一个 php 脚本。

假设我们有这样的 html。我们有一个输入字段和一个列表来显示结果。

 <div class="icon"></div>
 <input type="text" id="search" autocomplete="off">
 <ul id="results"></ul>

我们有一个 Jquery 脚本,它将监听输入字段上的 keyup 事件,如果它不为空,它将调用 search() 函数。search() 函数将运行 php 脚本并使用 AJAX 在同一页面上显示结果。

这是JQuery。

$(document).ready(function() {  

    // Icon Click Focus
    $('div.icon').click(function(){
        $('input#search').focus();
    });

    //Listen for the event
        $("input#search").live("keyup", function(e) {
        // Set Timeout
        clearTimeout($.data(this, 'timer'));

        // Set Search String
        var search_string = $(this).val();

        // Do Search
        if (search_string == '') {
            $("ul#results").fadeOut();
            $('h4#results-text').fadeOut();
        }else{
            $("ul#results").fadeIn();
            $('h4#results-text').fadeIn();
            $(this).data('timer', setTimeout(search, 100));
        };
    });


    // Live Search
    // On Search Submit and Get Results
    function search() {
        var query_value = $('input#search').val();
        $('b#search-string').html(query_value);
        if(query_value !== ''){
            $.ajax({
                type: "POST",
                url: "search_st.php",
                data: { query: query_value },
                cache: false,
                success: function(html){
                    $("ul#results").html(html);

                }
            });
        }return false;    
    }



});

在 php 中,对 mysql 数据库进行查询。php 将返回将使用 AJAX 放入 html 的结果。在这里,结果被放入一个 html 列表中。

假设有一个虚拟数据库,其中包含两个表动物和鸟类,它们具有两个相似的列名“type”和“desc”。

 //search.php
    // Credentials
    $dbhost = "localhost";
    $dbname = "live";
    $dbuser = "root";
    $dbpass = "";

    //  Connection
    global $tutorial_db;

    $tutorial_db = new mysqli();
    $tutorial_db->connect($dbhost, $dbuser, $dbpass, $dbname);
    $tutorial_db->set_charset("utf8");

    //  Check Connection
    if ($tutorial_db->connect_errno) {
        printf("Connect failed: %s\n", $tutorial_db->connect_error);
        exit();

    $html = '';
    $html .= '<li class="result">';
    $html .= '<a target="_blank" href="urlString">';
    $html .= '<h3>nameString</h3>';
    $html .= '<h4>functionString</h4>';
    $html .= '</a>';
    $html .= '</li>';

    $search_string = preg_replace("/[^A-Za-z0-9]/", " ", $_POST['query']);
$search_string = $tutorial_db->real_escape_string($search_string);

// Check Length More Than One Character
if (strlen($search_string) >= 1 && $search_string !== ' ') {
    // Build Query
    $query = "SELECT *
FROM animals
WHERE type LIKE '%".$search_string."%'
UNION ALL SELECT *
FROM birf
WHERE type LIKE '%".$search_string."%'"
;

    $result = $tutorial_db->query($query);
        while($results = $result->fetch_array()) {
            $result_array[] = $results;
        }

        // Check If We Have Results
        if (isset($result_array)) {
            foreach ($result_array as $result) {

                // Format Output Strings And Hightlight Matches
                $display_function = preg_replace("/".$search_string."/i", "<b class='highlight'>".$search_string."</b>", $result['desc']);
                $display_name = preg_replace("/".$search_string."/i", "<b class='highlight'>".$search_string."</b>", $result['type']);
            $display_url = 'https://www.google.com/search?q='.urlencode($result['type']).'&ie=utf-8&oe=utf-8';

                // Insert Name
                $output = str_replace('nameString', $display_name, $html);

                // Insert Description
                $output = str_replace('functionString', $display_function, $output);

                // Insert URL
                $output = str_replace('urlString', $display_url, $output);



                // Output
                echo($output);
            }
        }else{

            // Format No Results Output
            $output = str_replace('urlString', 'javascript:void(0);', $html);
            $output = str_replace('nameString', '<b>No Results Found.</b>', $output);
            $output = str_replace('functionString', 'Sorry :(', $output);

            // Output
            echo($output);
        }
    }
于 2014-01-17T20:41:49.150 回答