使用.each和if语句迭代来自AJAX JQUERY的回调JSON数据以匹配RegExp

时间:2014-01-16 13:11:43

标签: javascript php jquery ajax json

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

为什么我要这样做?

  • 我想重用sql查询,搜索数据库中的匹配行。
  • livesearch只会向文本框中的输入数据显示5个匹配结果,并且会显示额外的“更多选项”标签。 Theey将全部可点击,最终导航到网站内的链接,但更多选项选项卡将使用我用于实时搜索的相同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);

    }

});
}

目前,当我对此进行测试时,它无效并且Google Chrome控制台显示错误

未捕获的TypeError:无法使用'in'运算符在

中搜索“22”

[ “SSS”, “SSS”]

我已将数据返回限制为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);


?>

1 个答案:

答案 0 :(得分:0)

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

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(value)的参数未定义

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

function find(value){

if (typeof foo == 'undefined')
return;