当我尝试使用以下代码实现自动完成时:
$('#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 :(得分:0)
为了确保已发送值,您可以查看浏览器使用PHP发送到Web服务器的标头以进行测试。
这可以使用apache_request_headers()函数,但只有在Apache作为模块运行PHP时才有效。
如果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没有作为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()返回。
Chrome有一个带有多个项目的“网络”标签,当我点击它们时,我可以在标签中看到右侧的标题。
在Windows上按 F12 或在Mac上按⌥⌘I打开Chrome开发者工具。
您可以使用
检测PHP中使用的请求类型(GET,POST,PUT或DELETE)$_SERVER['REQUEST_METHOD']
有关详细信息,请参阅documentation for the $_SERVER variable。
或者您可以使用$ _REQUEST ['you_variable']检索值。
注意$ _REQUEST是一个与$ _GET和$ _POST不同的变量,在PHP中也是如此 - 在运行时修改$ _GET或$ _POST元素不会影响$ _REQUEST中的元素,反之亦然。