【发布时间】:2013-09-27 14:30:13
【问题描述】:
我的网站使用 PHP、Smarty、MySQL、jQuery 和 AJAX。现在场景如下: 我的表单上有三个字段。 smarty模板中这三个字段的代码如下:
<label>Class</label>
<div class="form-element">
<select name="class_id" id="class_id" onchange="get_section_by_class(this.value, 'get_section_by_class', '#section_id'); return false;">
<option value="">-Select Class-</option>
{foreach from=$all_class item=class key=key}
<option value="{$class.group_id}" {if $class_id == $class.group_id} selected="selected"{/if}>{$class.group_name}</option>
{/foreach}
</select>
</div>
<label>Section</label>
<div class="form-element">
<select name="section_id" id="section_id">
{if empty($section_id)}
<option value="">-Select Section-</option>
{else}
<option value="all">All</option>
{/if}
{foreach from=$all_section_by_class item=section key=key}
<option value="{$section.group_id}" {if $section_id==$section.group_id} selected="selected"{/if}>{$section.group_name}</option>
{/foreach}
</select>
</div>
<label>Name</label>
<div class="form-element">
<input type="text" class="" name="user_name" id="user_name" value="{$user_name}" />
</div>
现在从上面的代码中,我想让名为 user_name 的字段自动填充。要显示为自动填充的值取决于从上述代码的其他两个选择控件中选择的值。也就是说,我想将控件 class_id 和 section_id 的值传递到 AJAX 请求中以获取用户名的自动填充列表。 为此,我编写了以下代码,但它对我不起作用。您能帮我启用名为 user_name 的文本字段自动完成功能吗?提前致谢。我的不可行的代码如下:
{literal}
<script language="javascript" type="text/javascript">
$(function() {
$("#user_name").autocomplete({
source: function( request, response ) {
$.ajax({
url: "report_student_result.php",
data: {'request_type':'ajax', 'op':'get_student_names', 'class_id':request.class_id, 'section_id':section_id },
dataType: "json",
success: function( data ) {
response( $.map( data.myData, function( item ) {
return {
//How to access the jason response here and assign it in autopopulate?
}
}));
}
});
}
});
});
</script>
{/literal}
report_student_result.php文件中的PHP代码如下(switch case之一):
<?php
$request = empty( $_GET ) ? $_POST : $_GET ;
$op = $request['op'];
global $gDb;
switch($op) {
case'get_student_names':
// escape your parameters to prevent sql injection
$param = mysql_real_escape_string($_GET['term']);
$options = array();
$sql = " SELECT CONCAT(u.user_first_name, " ", u.user_last_name) as full_name FROM users as u JOIN users_groups_subscribe as ugs ON u.user_id = ugs.subscribe_user_id WHERE ugs.subscribe_group_id=10 ";
$this->mDb->Query( $sql);
$data = $gDb->FetchArray();
$data = json_encode($data);
echo $data;
die;
break;
}
?>
我也不知道应该如何访问 json 响应。经过这么多的谷歌搜索和所有的研究,我写了上面的代码。它可能有很多错误,请帮助我使该字段自动完成可行。
【问题讨论】:
-
我在自动完成方面遇到了很多问题,但在过去的几周里,我取得了进展并且很好地处理了它。最重要的是您必须确保呈现的数据是 json 格式。自己运行你的 php,然后把屏幕转储到jsonlint.com。然后将自动完成放入成功函数中。如果这是您的目标,多列自动完成非常复杂。
-
我看到'ajax.success'函数需要调用'response'函数和数组来自动完成。只需从 'item' 的 $.map 函数返回一些东西。而且您的自动完成功能应该可以正常工作。这是一个类似的例子jqueryui.com/autocomplete/#remote-with-cache
-
我希望您不要在此处的电子邮件上使用 用户名,which is a bad practice
标签: php jquery mysql ajax jquery-ui-autocomplete