0

我想使用 jQuery 的自动完成功能来执行以下操作:当用户在文本框中键入文本时,他将看到从服务器获取的可能单词列表。我的 HTML 代码是一个简单的文本框:

<label for="customer-name">Enter customer names: </label>
<input type="text" id="customer-name" name="customer-name"/>

从服务器发送和获取数据的 JavaScript 代码由 jQuery UI 的自动完成和 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不会从@FormParam注入中获得值“C”,它是null. 通常我总是通过使用来获取表单参数值@FormParam。但在这种情况下,该值始终为空。如何从 ajax post 获取表单值?@FormParam使用正确吗?如果没有,在这种情况下我应该使用什么来获取文本框值?

4

1 回答 1

0

我得到了答案。在 AJAX 请求中,发送到服务器的数据应该封装在一个对象中,如下所示:

data: {nameString: request.term}

然后在服务器端,用作注解nameString的参数:@FormParam

public Response getCustomerInfo(@FormParam("nameString") String partialName) {
}

我不知道为什么在这种情况下我们不能使用标签中的name属性作为参数。<input>@FormParam

于 2013-10-23T01:33:16.763 回答