【问题标题】:AJAX search form: how to trigger PHP query?AJAX 搜索表单:如何触发 PHP 查询?
【发布时间】:2018-10-22 18:01:51
【问题描述】:

我是 AJAX 新手,偶然发现了一个小问题。我的数据库中的页面有一个自定义搜索字段:

PHP:

 if(isset($_GET['fdf_search'])){
     $term_search = $_GET['fdf_search'];
     $fdf_pages = $mysqli_con->select("SELECT * FROM `pages` WHERE `alias` LIKE '%".$term_search."%'");
}

AJAX:

$(document).ready(function() {
$("#fdf-search").keyup(function() {
    // Assign $_GET['fdf-search'] to variable "searchKey" in js
    var searchKey = $('#fdf-search').val();
    if (searchKey == "") {
        //nothing
    }else{
        console.log('ajax called');
        $.ajax({
            type: "GET",
            url: "/fluidify/fdf-admin/functions/fdf_system_search.php",
            data: {
                search:searchKey
            },
            success: function(html){
                window.history.replaceState(null, null, "?fdf_search=" + searchKey + "");
            }
        });
    }
});
});

HTML:

<form action="" method="get">
    <input id="fdf-search" class="fdf-search" type="text" placeholder="zoeken" name="fdf_search" value="">
    <input class="fdf-search" type="submit" value="Zoeken" name="fdf_submit_search">
</form>

当我输入任何单词时,我希望我的 AJAX 触发 PHP 查询并查找并返回任何结果。现在window.history.replaceState(null, null, "?fdf_search=" + searchKey + ""); 正在更改我网址中的GET,但由于某种原因它什么也没做。

感谢所有帮助:)

编辑:选择();类

public function select($query,$report = NULL){
    $result_array = array();
    $result_empty = false;
    $result = $this -> query($query);
    if($result !== false){
        while($row = $result -> fetch_assoc()){
            $result_array[] = $row;
        }
        return($result -> num_rows === 0) ? false : $result_array;
    }else{
        if($report === true){
            echo "error in query:";
            print_r($result);
            print_r($result_array);
            print_r($query);
            echo "<br>";
        }
    }
}

【问题讨论】:

  • “正在更改我的 URL 中的 GET,但由于某种原因它什么也没做” - 这是两个相互排斥的事情。 这行代码所做的一切 就是修改 URL 值。如果它成功地做到这一点,那么它的工作。您还希望您的代码执行其他操作吗?
  • 好吧,我想从 PHP 查询中获得新的结果。我的GET 变量正在使用我提供的代码进行更新,但由于某种原因,我没有从我的 PHP 查询中获得更新的结果。
  • 看起来你的 php 代码没有回显任何东西,加上你的 ajax 的成功函数没有使用响应(html),你需要从 php 中回显一些东西并在你的成功函数中使用它.
  • 在您的 AJAX success 函数中,您没有对 html 变量做任何事情。这将包含服务器返回的任何内容。
  • 你应该给 POST 类型:“GET”,ajax 调用。因为你在传递数据就像在正文中一样

标签: php jquery ajax forms search


【解决方案1】:

要返回结果,您应该从您的 php 代码中输出一些内容,如下所示:

 if(isset($_GET['fdf_search'])) {
     $term_search = $_GET['fdf_search'];
     $fdf_pages = $mysqli_con->select("SELECT * FROM `pages` WHERE `alias` LIKE '%".$term_search."%'");
     //output the result
     echo json_encode($fdf_pages);
 }

您的 ajax 调用应如下所示:

$.ajax({
    type: "GET",
    url: "/fluidify/fdf-admin/functions/fdf_system_search.php?fdf_search=" + searchKey
}).done(function(json){
    //parse the ajax response
    search_result = JSON.parse(json);

    //do something with search_result ...

 });

【讨论】:

  • 您的 sql 查询也缺少一些引号 :)
  • 我明白了,我的错!然而,真正的 SQL 更长,但为了便于阅读,我将其缩短了 :) 使用新的 ajax 调用,我的 PHP 文件中出现 500 个错误。还不知道为什么……
  • 我确定$mysqli_con-&gt;select() 不是mysqli 函数,你的意思是$mysqli_con-&gt;query();
  • select 是一个类。在我使用的类里面 query();我所有的网络项目都使用了除了 ajax 部分之外的所有东西,所以这不应该是问题:)
  • php 调试控制台告诉你什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-12
  • 1970-01-01
  • 2016-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-23
相关资源
最近更新 更多