首先抱歉我的英语不好。 我是使用AJAX和API的新手,所以我真的不知道自己做错了什么。 我必须在选择下拉列表后填充一些文本框,让我们说我必须使用:姓名Last_Name年龄性别
我已经编写了一个ajax函数和一个工作正常的API(我在另一个视图上使用它来显示)然而我的ajax代码不起作用,它没有填充文本框,因为它'应该做的。 我尝试使用Chrome来解决请求问题,这是网址:
https://localhost:44397/api/pacient/21?id=21&_=1510262500793
根据我的说法,这个网址应该包含我的数据库记录的名称,但是我得到了两次我的用户名。
我的下拉列表:
<div class="col-md-4 form-group">
@Html.LabelFor(m => m.Pacient)
@Html.DropDownListFor(m => m.Pacient, new SelectList(Model.Pacient,"Id", "Name"), "--Select--", new { id = "pacientSelector", @class = "form-control" })
</div>
我的API控制器操作(使用自动映射):
//GET /Api/pacient/1
public IHttpActionResult GetPacient(int id)
{
var pacient = _context.Pacient.SingleOrDefault(p => p.Id == id);
if (pacient == null)
return NotFound();
return Ok(Mapper.Map<Pacient, PacientDto>(pacient));
}
我的AJAX功能:
$('#pacientSelector').change(function() {
var pacientId = $(this).val();
$.ajax({
url: '/api/pacient/' + pacientId,
type: 'GET',
async: true,
cache: false,
data: {id: pacientId},
success: function(data, pacient) {
$("#textboxId").val = pacient.Name;
}
});
});
答案 0 :(得分:0)
您要发送id两次,一个是url中的查询字符串(通过显式将值连接到url )和data
中的一个。由于您使用 GET
作为方法,因此jQuery $.ajax
方法会将数据属性值作为查询字符串键值项附加到网址,因此您看到的值为2次。 但即使你发送了两次。您的api操作方法仍然可以从其中一个获取值。
如果网址中的重复值让您烦恼,只需删除它们即可。
$('#pacientSelector').change(function() {
var pacientId = $(this).val();
$.ajax({
url: '/api/pacient/',
data: {id: pacientId}
}).done(function(data) {
console.log(data);
});
});
现在要设置文本框值,您需要使用val()
方法。还要确保您正在访问返回done
或success
处理程序的正确响应变量。
.done(function(data) {
$("#textboxId").val(data.Name);
});
这应该可以使用假设响应对象具有Name
属性。请注意,javascript 区分大小写。因此,如果您的Web API配置为返回小写,请使用data.name
您可以使用速记$.ajax
来代替$.get
来电,使其更加紧凑
$('#pacientSelector').change(function () {
$.get('/api/pacient/' + $(this).val())
.done(function (data) {
$("#textboxId").val(data.Name);
});
});