【问题标题】:Retrieve input value with server-side script for autocomplete()使用 autocomplete() 的服务器端脚本检索输入值
【发布时间】:2016-06-15 16:14:18
【问题描述】:

当我尝试使用以下代码实现自动完成时:

$('#keyword').autocomplete({
    source : '/Dev/pages/search.php',
    minLength : 3,
    type : 'POST',
    select: function( event, ui )
    {
         $(this).data("autocomplete").menu.element.addClass("yellow");
    }
})
.data( "ui-autocomplete" )._renderItem = function( ul, item )
{
    console.log(item);
    return $( "<li>" )
    .append( "<a>" + add3Dots(item.name,20) + "</a>" )
    .appendTo( ul );
 };

if (isset($_POST["term"])){

    $term = trim($_GET['term']);

    $parts = explode(' ', $term);
    $p = count($parts);

    $a_json = array();
    $a_json_row = array();

    $search = connexion::bdd_test();
    $requete = "SELECT name from BDD_TEST.companies";

    for($i = 0; $i < $p; $i++) {
      $requete .= ' WHERE name LIKE ' . "'%" . $conn->real_escape_string($parts[$i]) . "%'";
    }

    $result = $search->query($requete);
    while($donnees = $result->fetch(PDO::FETCH_ASSOC)) {
        $a_json_row["name"] = $data['name'];
        array_push($a_json, $a_json_row);       
    }

}
else
{
    $a_json['call']=false;
    $a_json['message']="Problem to collect word.";
}

$json = json_encode($a_json);
print_r($json);

当我测试时,如果条件不满足,我直接从 else “问题收集单词”中得到消息。 这意味着 $_POST["term"] 没有定义。

如何检索输入值?

【问题讨论】:

    标签: php jquery post autocomplete jquery-autocomplete


    【解决方案1】:

    为确保已发送值,您可以查看浏览器发送到使用 PHP 的 Web 服务器的哪些标头用于测试目的。

    使用 apache_request_headers() 函数可以做到这一点,但它仅在 PHP 作为模块在 Apache 上运行时才有效。

    • 如何使用 apache_request_headers() :

    如果 PHP 作为模块在 Apache 上运行,则可以使用 apache_request_headers() 函数检索浏览器发送的标头。以下示例代码使用 print_r 输出此函数调用的值:

    print_r(apache_request_headers());
    

    使用来自 Google Chrome 的示例请求的上述输出将输出类似于以下内容:

    Array
    (
      [Host] => www.testing.local
      [Connection] => keep-alive
      [User-Agent] => Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.206.1 Safari/532.0
      [Cache-Control] => max-age=0
      [Accept] => application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
      [Accept-Encoding] => gzip,deflate,sdch
      [Accept-Language] => en-US,en;q=0.8
      [Accept-Charset] => ISO-8859-1,utf-8;q=0.7,*;q=0.3
    )
    
    • 当 PHP 作为 CGI 运行时的替代方案:

    如果 PHP 没有在 Apache 上作为模块运行,则浏览器标头应存储在 $SERVER 数组中,键是转换为大写的请求标头名称,连字符替换为下划线,前缀为HTTP

    上面显示来自 $_SERVER 的相关行的相同请求如下:

    [HTTP_HOST] => www.testing.local
    [HTTP_CONNECTION] => keep-alive
    [HTTP_USER_AGENT] => Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.206.1 Safari/532.0
    [HTTP_CACHE_CONTROL] => max-age=0
    [HTTP_ACCEPT] => application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
    [HTTP_ACCEPT_ENCODING] => gzip,deflate,sdch
    [HTTP_ACCEPT_LANGUAGE] => en-US,en;q=0.8
    [HTTP_ACCEPT_CHARSET] => ISO-8859-1,utf-8;q=0.7,*;q=0.3
    

    如果 apache_request_headers() 函数不存在,另一种方法是创建我们自己的函数,该函数仅从 $_SERVER 中提取值并将键名转换为与 apache_request_headers() 相同的样式。这样做是这样的:

    if(!function_exists('apache_request_headers')) {
        function apache_request_headers() {
            $headers = array();
            foreach($_SERVER as $key => $value) {
                if(substr($key, 0, 5) == 'HTTP_') {
                    $headers[str_replace(' ', '-', ucwords(str_replace('_', ' ', strtolower(substr($key, 5)))))] = $value;
                }
            }
            return $headers;
        }
    }
    

    仅当具有该名称的函数不存在时才声明新函数。最终结果是,无论 PHP 内部函数是否存在,您都可以在代码中调用具有此名称的函数。

    通过 $SERVER 数组完成一个循环,并将任何以 HTTP 开头的键添加到该数组中,并通过一系列函数调用将键转换为与由 apache_request_headers() 返回。

    • 在 Google Chrome 中查看 HTTP 标头

    Chrome 有一个“网络”选项卡,其中包含多个项目,当我单击它们时,我可以在选项卡的右侧看到标题。

    在 Windows 上按 F12 或在 Mac 上按 ⌥⌘I 以调出 Chrome 开发者工具。

    • 尝试在不知道 HTTP 方法的情况下检索值

    您可以通过使用检测在 PHP 中使用了哪种请求类型(GET、POST、PUT 或 DELETE)

    $_SERVER['REQUEST_METHOD']
    

    更多详情请查看documentation for the $_SERVER variable

    或者您可以使用 $_REQUEST['you_variable'] 检索值。

    注意 $_REQUEST 是不同于 $_GET 和 $_POST 的变量,它在 PHP 中被视为 - 在运行时修改 $_GET 或 $_POST 元素不会影响 $_REQUEST 中的元素,反之亦然。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-11
      • 1970-01-01
      • 2020-01-26
      • 1970-01-01
      • 1970-01-01
      • 2022-07-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多