1


我已经在我的网站上实现了运行良好的 jQuery 自动完成功能。但是,我想使用自动完成的结果从数据库中检索所选人员的电话号码。

数据库结构是这样的;

id | name | type | tel | mobile | email | level
===============================================
1 | John Smith | judge | 01234 567890 | 07812 345678 | jsmith@example.com | BS Two Star

这是我到目前为止更新的代码

自动完成功能

<script>
jQuery(document).ready(function($) {
    $('#inputChiefJudge').autocomplete({
        source:'lookups/shows-sj-searchforjudge.php',
        change: function (event, ui) {
            $.ajax({
                type: POST,
                url: 'lookups/shows-sj-findtel.php',
                data: 'id='+ id,
                success: function(data) {
                    details = $.parseJSON(data);
                    $('#inputChiefJudge').text("hello");
                    $('#chiefjudgetel').text(details);
                },
            });
        },
        minLength:2});
});
</script> 


查找/显示-sj-findtel.php

<?php
include("config.php");
mysql_connect ($DbHost, $DbUser, $DbPass);
mysql_select_db ("equilive_manager");
$id = $POST["id"];
$result = mysql_query("SELECT tel, mob FROM officials WHERE id='{$id}'");
$judgerow = mysql_fetch_array($result, MYSQL_ASSOC);

$contactdetails[] = array(
'tel' => $row['tel'],
'mob' => $row['mob'],
);

echo json_encode($data);
flush();
?>


查找/显示-sj-searchforjudge.php

<?php
// if the 'term' variable is not sent with the request, exit
if ( !isset($_REQUEST['term']) ) exit;

// connect to the database server and select the appropriate database for use
include("../config.php");
mysql_connect ($DbHost, $DbUser, $DbPass) or die ('I cannot connect to the database because: ' . mysql_error());
mysql_select_db ("equilive_manager");

// query the database table for name that match 'term'
$term = mysql_real_escape_string($_REQUEST['term']);
$rs = mysql_query("SELECT id, name, level FROM officials WHERE name LIKE '%{$term}%' ORDER BY name LIMIT 0,10");

// loop through each name returned and format the response for jQuery
$data = array();
if ( $rs && mysql_num_rows($rs) )
{
    while( $row = mysql_fetch_array($rs, MYSQL_ASSOC) )
    {
        $data[] = array(
            'label' => $row['name'] .', '. $row['level'],
            'value' => $row['name'],
            'id' => $row['id'],
        );
    }
}

// jQuery wants JSON data
echo json_encode($data);
flush();

在此先感谢,克雷格

4

3 回答 3

1

您至少在代码中有一个问题,那就是在 getChiefJudgeContactDetails() 中,您将 javascript 与 php 混合在一起。如果这是您第一次输出页面并且代码位于 PHP 页面上,则将两者混合使用效果很好。但是,如果您希望每次从自动完成触发更改事件时 javascript 都运行 PHP 代码,那么这是行不通的。

使用其他人所说的选择事件,在其中,向与您的自动完成类似的端点发出ajax请求,但将您的选项的值发送给它(例如ID值2)。然后在 PHP 脚本中使用 SQL 来获取该 id 的行并将其作为 json 对象返回。在 jquery ajax 调用结果处理程序中解析结果并更新 UI。

更新:

将您的自动完成更改为如下所示

<script>
jQuery(document).ready(function($) {
    $('#inputChiefJudge').autocomplete({
        source:'lookups/shows-sj-searchforjudge.php',
        select: function (event, ui) {
            $.ajax({
                type: POST,
                url: 'lookups/shows-sj-findtel.php',
                data: {id:id},
                success: function(data) {
                    details = $.parseJSON(data);
                    $('#inputChiefJudge').text("hello");
                    $('#chiefjudgetel').text(details);
                },
            });
        },
        minLength:2});
});
</script> 

不要使用自动完成的更改选项,而是使用选择(如您问题的其他答案所述)。此外,不要使用字符串 ("id="+id) 作为数据,而是使用 js 对象 ({id:id})。jquery 将在发送到服务器之前正确处理它的序列化,结果是它实际上在您的 php 脚本中显示为 post 变量。

另外,作为补充说明,我建议考虑使用 PDO 驱动程序(http://www.php.net/manual/en/pdo.prepare.php)来访问您的数据库,而不是使用 mysql_* 命令. 它是面向对象的,并且还自动提供旧命令中没有的安全功能,例如防止 SQL 注入攻击。

于 2013-05-02T11:10:50.043 回答
0

您应该使用自动完成的“选择”事件:

http://api.jqueryui.com/autocomplete/#event-select

于 2013-05-02T10:55:26.947 回答
0

你可以做到这一点select optionautoComplete

您需要做的就是发送新的 ajax 请求以获取选定的人员编号。

select: function (event, ui)
{
   //make $.ajax request and send selected value.
   //you can send selected value using => ui.item.value
}
于 2013-05-02T10:54:02.440 回答