我正致力于从远程数据源获取jQuery UI自动完成功能。 http://jqueryui.com/demos/autocomplete/#remote
示例代码调用php脚本search.php
$(function() {
$( "#birds" ).autocomplete({
source: "search.php",
minLength: 2
});
});
来自search.php的代码段中的第一行
$q = strtolower($_GET["term"]);
if (!$q) return;
$items = array( //set a bunch of key-value pairs);
$q = strtolower($_GET["term"]);
究竟是什么意思? !q
总是评估为true,导致.php脚本返回,从而阻止脚本的其余部分执行吗?
修改
作为参考,如果你转到http://jqueryui.com/download并下载自动完成包,我引用的确切示例在
中引用答案 0 :(得分:4)
strtolower调用获取查询字符串变量term并将其转换为小写;例如search.php?term = TEST结果' test'被保存在$ q。如果您要从区分大小写的来源中检索数据,那么您可能希望这样做以确保两者的期限值都是' test'和' TEST'返回相同的数据。
!$ q测试$ q是否没有值;是因为它没有在URL中传递或者它是空的(search.php?term =)。
您可以使用以下方法测试此逻辑:
<?php
$q = strtolower($_GET["term"]);
echo $q ? '$q was set' : '$q was not set'
?>
输出:
search.php => $q was not set search.php?term= => $q was not set search.php?term=TEST => $q was set
答案 1 :(得分:1)
如果未设置$_GET['term']
,您发布的php代码段将触发PHP通知 - 例如如果在没有参数的情况下调用search.php
我会这样做:
if(!empty($_GET["term"]))$q = strtolower($_GET["term"]);
else return;
$items = array(...
如果未设置参数,这将使php返回而不是抛出错误。
if(!empty($_GET["term"]))$q = strtolower($_GET["term"]);
将检查数组是否包含给定键([term]
/ search.php?term=something
)处的任何数据。这也将隐式检查数组中是否存在密钥
如果term
索引上的数组不为空,则会使用内置$_GET["term"]
函数将数据从strtolower()
转换为小写
如果给定键上为空,则返回 - 从而阻止脚本继续
我也会尝试解释示例代码:
$q = strtolower($_GET["term"]);
将GET参数term
转换为小写
if (!$q) return;
如果$ q为NOT
true
或为空(空值为false),则脚本停止。
如果$ q包含任何内容,它将继续使用该脚本。