【问题标题】:PHP Ajax not creating post variablePHP Ajax 没有创建 post 变量
【发布时间】:2014-08-28 09:05:13
【问题描述】:

前段时间我用 ajax 和 php 做了一个搜索功能。您可以用文本填写文本框,它会尝试在存储在数据库中的所有国家/地区之间找到匹配项。 现在我正在改进代码并使其成为 PDO,但我破坏了一些东西,我无法找出是什么。

这是我的纯 HTML

<head>
    <title>Ajax</title>
    <link href="style/style.css" rel="stylesheet" type="text/css" />
    <link rel="stylesheet" type="text/css" />
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
    <script type="text/javascript" src="scripts/Javascript.js"></script>
</head>

<body>
    <div id="main">
            <h1 class="title">Enter your country please</h1>

        <input type="text" id="search" autocomplete="off" onchange="">
            <h4 id="results-text">Showing results for: <b id="search-string">Array</b></h4>

        <ul id="results"></ul>
    </div>
</body>

这是我的 Jquery 和 javascript。请注意,我没有对 HTML 或 javascript 进行任何更改,因此不会出现类型错误。

$(document).ready(function() {
alert('asdf');

function search() {
    var query_value = $('input#search').val();
    $('b#search-string').html(query_value);

    if(query_value !== ''){
        $.ajax({
            type: "POST",
            url: "search.php",
            data: { query: query_value },
            cache: false,
            success: function(html){
                $("ul#results").html(html);
            }
        });
    }

    return false;
}

$("input#search").live("keyup", function(e) {
    clearTimeout($.data(this, 'timer'));
    var search_string = $(this).val();

    if (search_string == '') {
        $("ul#results").fadeOut();
        $('h4#results-text').fadeOut();
    }

    else {
        $("ul#results").fadeIn();
        $('h4#results-text').fadeIn();
        $(this).data('timer', setTimeout(search, 100));
        };
    });
});

这是我的 Search.PHP

<?php
class SearchEngine{

    private $html;

    public function __construct($conn){

        $this->html = '<li class="result">
                            <h3>NameReplace</h3>
                            <a target="_blank" href="ULRReplace"></a>
                        </li>';

        if (isset($_POST["query"])) {
            $search_string = $_POST['query'];
        }

        else{
            $search_string = '';
            echo('Something went wrong, post query not set');
        }


        //$search_string = mysql_real_escape_string($search_string);

        if (strlen($search_string) >= 1 && $search_string !== ' ') {

            $query = 'SELECT * FROM country WHERE name LIKE "%' . $search_string . '%"';
            $result = $conn->prepare($query);
            $result->execute();
            $result_array = $result->fetchAll();

                foreach ($result_array as $result) {
                    $display_name = preg_replace("/" . $search_string . "/i", "<b>" . $search_string . "</b>", $result['name']);
                    $display_url = 'sadf';

                    $output = str_replace('NameReplace', $display_name, $this->html);
                    $output = str_replace('ULRReplace', $display_url, $output);
                    echo($output);
                }
        }
    }

}

?>

问题:

永远不会创建 Post 查询,为此我做了一个 isset,所以现在没有创建 Post Query。它将创建一个值为“B”的 Post Query。

任何帮助将不胜感激。请温柔,我是 Ajax 的新手,我更想了解而不是有解决方案。谢谢

【问题讨论】:

  • 如果从未创建过 POST,那肯定是 Javascript 问题。看看我是否能看到任何东西。非常具体地说,听起来 .live 没有在 keyup 上调用
  • 你实例化了你的 SearchEngine 类吗?
  • @DJDarkViper 谢谢,我就是这么想的,但我就是找不到。我敢打赌,这是最明显的人为错误。
  • @JonathanSimas 你是什么意思 insatatiated searchEngine 类?

标签: javascript php jquery ajax pdo


【解决方案1】:

您没有指向正确的网址!看:

您已将 ajax 请求指向 search.php:

 $.ajax({
        type: "POST",
        url: "search.php",

但是你在 search.php 中只有一个类。一个类自己不做任何事情。您必须实例化并调用其方法/函数。请比较这两条代码:

<?php
//server.php
//Doing nothing
class SearchEngine{

    private $html;

    public function __construct($conn){
     echo "I'm executing";
    }
}
?>

假设你在 server.php 中有这个

<?php
//server.php
//It will print "I'm executing" in the screen
class SearchEngine{

    private $html;

    public function __construct($conn){
     echo "I'm executing";
    }
}

$search = new SearchEngine($conn);

?>

要解决您的原始问题,您必须将 ajax 指向具有 INSTANTIATION 代码的页面,而不是类,如下所示:

//index.php
//Let's suppose you have this code in your index.php
$SearchEngine = new SearchEngine($conn);

所以你的 JQuery ajax 代码应该是这样的:

    $.ajax({
        type: "POST",
        url: "index.php",

【讨论】:

  • 哦,哇,我从来没想过,它立刻变得有意义!。非常感谢你的帮助。你不仅解决了我的问题,还帮助我学习!
【解决方案2】:

正如 Sean 所提到的,在 cmets 中,$.live jquery 方法在您的 jQuery 版本中已被弃用。

尝试改用 $.keyup

$("input#search").keyup(function() {
   // stuff
});

【讨论】:

  • 是的,我刚读过。新功能有什么不同吗?或者我可以毫无问题地替换它吗?
  • 只需替换涉及 $.live 声明的行,无需其他更改
  • 我没有做任何其他事情就更换了它,它立即起作用了!
猜你喜欢
  • 1970-01-01
  • 2011-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-29
  • 2022-01-14
  • 2014-06-26
相关资源
最近更新 更多