Почему этот php / ajax не работает? - PullRequest
0 голосов
/ 31 марта 2011

По сути, у меня есть живой поиск, который работает для двух из трех переключателей. «Профессор» и «Кафедра» работают отлично. Но радиокод "Курс", похоже, не работает. Я не понимаю Professor

Department

Before I type anything in it gives me this

If I type in

Кажется, 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;
}

The columns in phpmyadmin

** 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>

Один столбец «код» представляет собой числовое значение, например 153, или «Префикс» и «Код» вместе означают что-то вроде «ИНФО 153».

Кто-нибудь? Есть ли у Ajax ограничение на количество записей, которые он может извлечь? Эта таблица курсов может иметь 1200 курсов, но почему они не определены?

Ответы [ 2 ]

2 голосов
/ 31 марта 2011

Вы получаете name, но при поиске курса name был переименован в course. Вы можете исправить это в PHP, изменив эту строку:

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

К этому:

$arr[] = array( "id" => $row["cID"], "name" => $row["prefix"] . ' ' . $row["code"]);

Кроме того, в JavaScript вы устанавливаете ext, не объявляя его. Вам, вероятно, следует изменить эту строку:

var phppage;

К этому:

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>");
});
0 голосов
/ 31 марта 2011

Да, я также реализовал функцию CONCAT для функции LIKE в предложении where, но это не сработало. Затем я использовал отдельный столбец для функции 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;
}

Наслаждайтесь !!!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...