jquery ui autocomplete和php json string

时间:2012-03-14 16:02:16

标签: php jquery json

我正在使用php从mysql数据库中获取数据,然后在jquery ui自动完成中使用该数据。但似乎返回的JSON与jquery ui需要的不匹配。 返回的JSON看起来像这样:

["dyes miran famint","annie ferrer mendrez","annie ferrer mendrez","anton setra masgre","anton setra masgre","jeniffer hades cruz","jeniffer hades cruz","alvin louie urbano maranon","alvin louie urbano maranon","francisza jerrielleza bullonza","blaze br tags anchor"]

我甚至在它上面使用了jQuery.parseJSON。

这就是我在php文件中所做的:

$class_code = $_POST['class_code'];

$student_list = array();
$students = mysql_query("SELECT accounts.id, fname, mname, lname, classcode
                        FROM account_details
                        LEFT JOIN accounts ON account_details.id = accounts.id
                        LEFT JOIN class_rooster ON accounts.id = class_rooster.id
                        WHERE accounts.status = 1 AND accounts.type='student'
                        AND (class_rooster.id  IS NULL OR classcode !='$class_code')");
$students_num = mysql_num_rows($students);
if($students_num > 0){
    while($row = mysql_fetch_assoc($students)){

        $student_list[] = $row['fname'] . ' ' . $row['mname'] . ' ' . $row['lname'];

    }
    echo json_encode($student_list);

这是我得到的错误:

Uncaught TypeError: Property 'source' of object #<Object> is not a function

这是JavaScript:

function get_students(){
        var class_code = $('#current_classes').val();
        $.post('student_list.php', {'class_code' : class_code},
            function(data){

                return data;
            }
        );
    }


    $("#student_name").live('click', function(){

        $("#student_name").autocomplete({
            source:  get_students()
        });
    });

3 个答案:

答案 0 :(得分:1)

查看documentation的概述部分,了解如何使用回调源类型。传递给函数的第二个参数是要使用的响应回调。您的get_students()函数应如下所示:

function get_students(current_val,callback){
        var class_code = $('#current_classes').val();
        $.post('student_list.php', {'class_code' : class_code},
            function(data){
               callback(data);
            }
        );
}

答案 1 :(得分:0)

看看documentation,它正在寻找类似的东西:

$(function() {
    var availableTags = [
        "ActionScript",
        "AppleScript",
        "Asp",
        "Scheme"
    ];
    $( "#tags" ).autocomplete({
        source: availableTags
    });
});

我的猜测是你正在$().autocomplete(json_obj)而不是$().autocomplete({source: json_obj})

答案 2 :(得分:0)

我认为你没有在autcompelete插件代码中使用源实体。检查您的自动完整代码

$("#inputbox").autocomplete({ source: data });

我相信您可以使用没有源实体的数据

同时检查你的php输出数组