我想使用jQuery的自动完成功能执行以下操作:当用户在文本框中键入文本时,他将看到从服务器获取的可能单词列表。我的HTML代码是一个简单的文本框:
<label for="customer-name">Enter customer names: </label>
<input type="text" id="customer-name" name="customer-name"/>
从服务器发送和获取数据的JavaScript代码由jQuery UI的autocomplete和jQuery AJAX函数实现:
$(function() {
$("#customer-name").autocomplete({
source: function(request, response) {
$.ajax({
url: '../account/customer-view',
type: 'POST',
contentType: 'application/json',
dataType: 'json',
data: request.term,
success: function(data) {
response($.map(data, function(item) {
return item;
}));
}
});
}
});
});
我的后端正在使用Java Jersey的Web服务。处理AJAX帖子的方法是:
@Path("customer-view")
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response getCustomerInfo(@FormParam("customer-name") String partialName) {
// ... code to use partialName
}
然而,当我启动我的应用程序并对其进行调试时,我发现当我在文本框中输入一个字母时,例如文本框中的“C”,变量partialName
没有得到值“ C“来自@FormParam
注射,它是null
。通常我总是使用@FormParam
获取表单参数值。但在这种情况下,该值始终为null。如何从ajax帖子中获取表单值? @FormParam
是正确使用的吗?如果没有,在这种情况下我应该使用什么来获取文本框值?
答案 0 :(得分:0)
我得到了答案。在AJAX请求中,发送到服务器的数据应封装在对象中:
data: {nameString: request.term}
然后在服务器端,使用nameString
作为@FormParam
注释的参数:
public Response getCustomerInfo(@FormParam("nameString") String partialName) {
}
我不知道为什么我们不能在name
标记中使用<input>
属性作为@FormParam
的参数。