为什么这个php/ajax不能工作?

为什么这个php/ajax不能工作?,php,ajax,Php,Ajax,基本上,我有一个实时搜索功能,可以搜索三个单选按钮中的两个。“教授”和“系”都工作得很好。但是“课程”无线电代码似乎不起作用。我不明白。 Ajax似乎正在工作,但出于某种原因,它没有拉这些字段 php是 function getDepartment($keywords){ $arr = array(); $query = mysql_query("SELECT dID, name FROM Department

基本上,我有一个实时搜索功能,可以搜索三个单选按钮中的两个。“教授”和“系”都工作得很好。但是“课程”无线电代码似乎不起作用。我不明白。

Ajax似乎正在工作,但出于某种原因,它没有拉这些字段

php是

function getDepartment($keywords){
    $arr = array();

    $query = mysql_query("SELECT dID, name 
                            FROM Department 
                            WHERE name LIKE '%". $keywords . "%'");

    while( $row = mysql_fetch_array ( $query ) )
    {
        $arr[] = array( "id" => $row["dID"], "name" =>  $row["name"]);
    }

    return $arr;
}

function getCourse($keywords){
    $arr = array();

    $query = mysql_query("SELECT cID, prefix, code 
                            FROM Course 
                            WHERE CONCAT(prefix,code) LIKE '%". $keywords . "%'");

    while( $row = mysql_fetch_array ( $query ) )
    {
        $arr[] = array( "id" => $row["cID"], "course" => $row["prefix"] . ' ' . $row["code"]);
    }

    return $arr;
}

**Javascript

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>jQuery Search Demonstration</title>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
    $(".keywords").keyup(function(){
        getData();
    });
    $(".table").click(function(){
        getData();
    });
});

function getData(){
    $.post("search.php", 
        {
            keywords: $(".keywords").val(),
            table: $('.table:checked').val()
        }, 
        function(data){
            $("div#content").empty();
            var phppage;
            switch($('.table:checked').val())
            {
                case 'professor': 
                    phppage = 'prof';
                    ext = '.php?pID=';
                    break;
                case 'department': 
                    phppage = 'department';
                    ext = '.php?dID=';
                    break;
                case 'course': 
                    phppage = 'course';
                    ext = '.php?cID=';
                    break;
            } 

            $.each(data, function(){
                $("div#content").append("- <a href='" + phppage + ext + this.id + "'>" + this.name + "</a>");
            });
        },
        "json");
}
</script>
</head>
<body>
Search by:
<input type="text" name="search" class="keywords" /><br />

<input type="radio" name="table" class="table" value="professor" checked="checked" /> Professor<br />
<input type="radio" name="table" class="table" value="department" /> Department<br />
<input type="radio" name="table" class="table" value="course" /> Course<br />

<div id="content" style="background-color:#eee;"></div>

</body>
</html>

jQuery搜索演示
$(文档).ready(函数(){
$(“.keywords”).keyup(函数(){
getData();
});
$(“.table”)。单击(函数(){
getData();
});
});
函数getData(){
$.post(“search.php”,
{
关键词:$(“.keywords”).val(),
表:$('.table:checked').val()
}, 
功能(数据){
$(“div#content”).empty();
var phppage;
开关($('.table:checked').val()
{
案例“教授”:
phppage=‘prof’;
ext='.php?pID=';
打破
个案"部门":
phppage=‘部门’;
ext='.php?dID=';
打破
“课程”案例:
phppage=‘课程’;
ext='.php?cID=';
打破
} 
$.each(数据,函数(){
$(“div#content”)。追加(“-”;
});
},
“json”);
}
搜索人:

教授
部门
课程
一列“code”是一个数字值,例如153,或者“前缀”和“code”加在一起类似于“INFO 153”


有人吗?Ajax对它可以提取的记录数量有限制吗?此课程表可能有1200个课程,但为什么它们没有定义?

您正在检索
名称
,但在搜索课程时,
名称
已重命名为
课程
。您可以在PHP中通过更改以下行来解决此问题:

$arr[] = array( "id" => $row["cID"], "course" => $row["prefix"] . ' ' . $row["code"]);
var phppage;
为此:

$arr[] = array( "id" => $row["cID"], "name" => $row["prefix"] . ' ' . $row["code"]);
var phppage, ext;
另外,在JavaScript中,您正在设置
ext
,但没有声明它。您可能应该更改这一行:

$arr[] = array( "id" => $row["cID"], "course" => $row["prefix"] . ' ' . $row["code"]);
var phppage;
为此:

$arr[] = array( "id" => $row["cID"], "name" => $row["prefix"] . ' ' . $row["code"]);
var phppage, ext;
编辑:这是将项目设置为适当的项目符号列表的方式:

var content=$("#content");
var ul=$("<ul>");
content.append(ul);
$.each(data, function(){
    ul.append('<li><a href="' + phppage + ext + this.id + '">' + this.name + "</a></li>");
});
var content=$(“#content”);
var ul=$(“
    ”); 内容追加(ul); $.each(数据,函数(){ ul.附加(“
  • ”); });
是的,我还在where子句中为LIKE函数实现了CONCAT函数,但它不起作用。然后我为LIKE函数使用了单独的列。当然,where子句不起作用

您可以为课程单选按钮功能实现以下代码:

function getCourse($keywords){
    $arr = array();

    $query = mysql_query("SELECT cID, prefix, code 
                            FROM Course 
                            WHERE prefix LIKE '%". $keywords . "%' OR code LIKE '%". $keywords . "%'");

    while( $row = mysql_fetch_array ( $query ) )
    {
        $arr[] = array( "id" => $row["cID"], "course" => $row["prefix"] . ' ' . $row["code"]);
    }

    return $arr;
}

享受

看起来where子句不起作用,并且添加了所有行。Fazo怎么会是where子句呢?它适用于professor,并且在sql中使用concat()只是一个想法-您没有提供该代码。太棒了!谢谢。另一个快速问题,是否有一种更方便用户的方式输出$arr的快速方法,例如,将所有课程设置在新的行上,如COM 310\n COM 420\n。。。等[[请原谅我的新手问题]@woopie:你现在输出的所有结果都是从破折号开始的。如果您将其替换为

,则它们都将位于单独的行中。如果您给我一秒钟的时间,我将编辑我的答案,以显示如何将其输出为适当的项目符号列表。
where
子句不是问题所在。