2016-03-02 52 views
1

当我尝试使用下面的代码来实现自动完成:检索与自动完成服务器端脚本()输入值

$('#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); 

当我测试,如果条件不满足我直接从其他地方收到消息“收集词汇的问题”。 这意味着$ _POST [“term”]没有定义。

如何检索输入值?

回答

0

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

这可以使用apache_request_headers()函数,但它只适用于PHP作为模块在Apache上运行。

  • 如何使用apache_request_headers():

如果PHP在Apache上运行的模块,然后将浏览器可以使用apache_request_headers()函数检索头。以下示例代码使用的print_r输出值从该函数调用:

print_r(apache_request_headers()); 

使用的示例请求,从上面的输出从谷歌浏览器将类似于下面的输出:

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 odule,浏览器头应被存储在$ 服务器阵列与该键被转换为大写的请求头名,hypens替换为下划线,并用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函数是否存在,您都可以在代码中使用该名称调用函数。

一个循环通过一系列的功能虽然$ 服务器阵列进行,与HTTP任何其键开始被添加到阵列中,关键是翻译要求是相同的格式由apache_request_headers为返回( )。谷歌浏览器

  • 查看HTTP头

Chrome提供了一个标签“网络”与几个项目,当我点击他们,我可以看到在标签右边的头。

F12在Windows或⌥⌘I在Mac上,弹出Chrome开发者工具。

enter image description here

  • 尽量不知道HTTP方法检索值(S)

可以检测使用了哪个请求类型在PHP由(GET,POST,PUT或DELETE)使用

$_SERVER['REQUEST_METHOD'] 

欲了解更多详情请参阅documentation for the $_SERVER variable

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

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