使用.each和if语句对AJAX JQUERY的回调JSON数据进行迭代,以匹配RegExp



我正在使用ajax jquery进行实时搜索,因此,根据在文本字段中键入的值,运行另一个php脚本,该脚本返回数据库中的一个行数组,该行数组使用echo-encode_json用json进行回显和编码,该数组在回调后在javascript中迭代。

我为什么要这么做?

  • 我想重用sql查询,它在数据库中搜索匹配的行
  • 实时搜索将只显示文本框中输入数据的5个匹配结果和一个额外的"更多选项"选项卡。这些结果最终都可以点击,导航到网站内的链接,但更多选项选项卡将使用我在实时搜索中使用的相同sql查询,因为它将直接进入一个页面,在那里它将显示所有匹配结果

这是我的JavaScript,有人能帮我吗?

<script type="text/javascript">
function find(value){
$( "#test" ).empty();
var myExp = new RegExp(value , "i");
$.ajax({
url: 'searchDb.php',
type: 'POST',
data: 'args='+value+'&limit=2',
success: function(data){
var output = '<ul class="searchresults">';
var count = 0;
$.each(data, function(key, val) {
if ((val.name.search(myExp) != -1)){
output += '<li>';
output += '<p>'+ val.name +'</p>';
output += '</li>';
count += 1;
if(count == 5){
output += '<li>';
output += '<a href="searchResults.php">More Results</a>';
output += '</li>';
if(value.length == 0){             
output = '<ul class="searchresults">';
}
return false;
}
}
if(value.length == 0){
output = '<ul class="searchresults">';
}
});
output += '</ul>';
$('#test').html(output);
}
});
}

目前,当我测试它时,它不起作用,谷歌Chrome控制台显示错误

未捕获的类型错误:无法使用"in"运算符在中搜索"22">

["ss","ss"]

我已将数据返回限制为2,仅用于测试。很明显,它正在返回,但我不理解不能使用"in"运算符。。。。。。。。任何帮助都将不胜感激!感谢

PHP代码:

<?php
$link = mysql_connect('localhost', 'root', '');
if (!$link) {
die('Not connected : ' . mysql_error());
}

$db_selected = mysql_select_db('test', $link);
if (!$db_selected) {
die ('Can't use test : ' . mysql_error());
}
?>

<?php
function searchDb($abc, $limit = "all"){
$lists = array();
if (isset($abc)) {
$sql = "SELECT testa FROM test WHERE testa LIKE '%$abc%'";

if($limit !== "all"){
$sql .= "LIMIT ". $limit;
}
$result = mysql_query($sql) or die('Error, insert query failed');

while ( $row = mysql_fetch_assoc($result))
{
$var = $row["testa"];
array_push($lists, $var);
}
}

echo json_encode($lists);
}
$abc = $_POST['args'];
$limit = $_POST['limit'];
$lala = searchDb($abc, $limit);

?>

您以这种方式构建响应数据阵列:

while ( $row = mysql_fetch_assoc($result))
{
$var = $row["testa"];
array_push($lists, $var);
}

试着这样做:

$RESPONSE = array();
$NAMES = array();
while ( $row = mysql_fetch_assoc($result))
{
$var = $row["testa"];
array_push($NAMES,$var);
}
$RESPONSE["NAMES"] = $NAMES;
print json_encode($RESPONSE);
exit();

在JS AJAX中:

$.each(data.NAMES, function(key, val) {
if ((val.search(myExp) != -1)){
.....

更新:按照您评论中的要求!

函数find(值)的参数是未定义的

所以在函数的顶部添加以下内容

function find(value){
if (typeof foo == 'undefined')
return;

最新更新