将数据从Javascript/HTML发送到php进行搜索


Sending data from Javascript/HTML to php to conduct search

我正在尝试使用php实现一个简单的搜索引擎。我应该让一个.php在我的服务器上持续运行并发布一个JSON吗?或者我可以以某种方式向服务器发布一些东西,并只有在发布了一些东西时才运行脚本吗?不管怎样,我都不知道该怎么做。我也一直在读一些关于CRON工作的文章。这适用于这里吗?

编辑:用户看到搜索框。在搜索框中键入查询。按enter键。使用AJAX向服务器发送JSON查询。服务器使用发送的JSON查询来搜索某些文档的索引,而不是搜索网站。服务器以JSON格式返回结果。这些结果随后被解释并显示给用户。

我已经在php中进行了搜索设置。我是php的新手。

第2版:我已经使用Elastic search进行了搜索设置。我只是想知道在服务器上将信息从Javascript/HTML站点发送到pHp的最佳实践是什么。我为不够清楚而道歉。

CRON作业将不适用,除非您希望安排搜索并在搜索完成时通知用户(尽管这是可能的,但这并不是您真正想要的)。

AJAX在这里非常方便,尤其是如果您想添加诸如自动完成之类的功能。但是,如果您希望页面重新加载,使用搜索结果重新呈现整个页面内容,或者使用这些结果重定向到另一个页面,AJAX是不必要的,因为您必须执行两个HTTP请求,而不是一个。

在我看来,您所需要做的就是通过GET请求获得一个带有搜索字段发布的单一输入表单。

例如:

<form action="/search_results.php" method="get">
<input type="text" name="query" />
<button type="submit">Search</button>
</form>

哪个会重定向到URL如下的搜索结果页面:/search_results.php?查询=一些+简单+搜索

然后,在PHP代码中,您可以使用$_GET["query"]获取查询参数,您可以直接将其传递给搜索引擎(Elastic search)进行分析。

我从未尝试过Elastic Search,但如果必须传递JSON数据,则可以使用对查询进行编码

$search = json_encode(array('query' => $_GET['query']));

这很难准确,因为你还没有提供预期的搜索格式,但我认为这应该会让你步入正轨。

如果您有任何问题,请随时在下面发表评论:)

html:

<form method="get" action="search.php>
<input type="text" name="search" />
<input type="submit" name="submit" value="Search" />
</form>

search.php:

<?php
$whatTheyWantToSearch = $_GET['search'];
// $whatTheyWantToSearch now holds the value that was submitted in the form
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<form id="myForm"> 
    <input id="request" type="text" size="20"><br/><br/>  
    <input type="submit" value="search">  
</form>  
<div id="search_result"></div>  
<script>  
    $(document).ready(function(){  
        $('#myForm').submit(function(){  
            $.ajax({  
                type: "POST",  
                url: "search.php",  
                data: "search_request="+$("#request").val(),  
                success: function(html){  
                    $("#search_result").html(html);  
                }  
            });  
            return false;  
        });  
    });  
</script>