【发布时间】:2014-12-30 02:35:28
【问题描述】:
这可能是重复的问题,但我想提一下,其他答案并没有解决我的问题。
正如问题所说,我想使用 ajax/jquery 填充下拉列表。我能够成功发送和接收 JSON 格式的数据,但它没有附加下拉列表。以下是我的代码:
查看
<select name="guard_id" id="guard_id" style="width:100%;">
<option>select guard</option>
<optgroup label="Previously assigned guard" id="trained_guards">
</optgroup>
</select>
Jquery/Ajax 调用
function checkTrainedGuards(sid) {
$.ajax({
dataType: 'JSON',
type: 'POST',
url: '<?php print site_url('roster/check_trained_guards'); ?>',
data: { sid: sid},
beforeSend:function() {
// this is where we append a loading image
$('#sid').addClass('loader-roster');
},
success:function(data) {
var appenddata;
$.each(data, function (key, value) {
appenddata += "<option value = '" + value.gid + " '>" + value.gname + " </option>";
});
$('#trained_guards').html(appenddata);
},
error:function(){
// failed request; give feedback to user
}
});
}
控制器
public function check_trained_guards(){
$this->load->model("guard");
$sid=$this->input->post("sid");
$trainedGuards=$this->guard->getGuardAlreadyWorkedOnSite($sid);
foreach ($trainedGuards as $guard) {
print json_encode(array(
'gid' => $guard->gid,
'gname' => $guard->guard_name
));
}
}
}
当我使用 firebug 对其进行测试时,我看到数据是正确的,并且是 JSON 格式,如下所示:
[{"gid":"293","gname":"Abc"},{"gid":"96","gname":"guard2"},{"gid":"101","gname":"guard3"},{"gid":"91","gname":"guard4"}]
但是,我只是想知道为什么它没有将结果附加到下拉框中?
我,也由alert(value.gid) 在jquery each loop 中测试了它,上面写着undefined。
我们将不胜感激。
【问题讨论】:
-
对于初学者,请在成功回调中设置
var appenddata = "";。然后在使用 html 方法之前尝试 console.logging 它,看看它等于什么。 -
我什么都不打印。
标签: php jquery ajax json codeigniter