1

我正在尝试在我的 Spring MVC 应用程序中借助 ajax 使用自动完成功能。我已经提到了这个。但其中存在一些问题。请指导我..

我的剧本就像..

    <script>

$(function() {
    $( "#bName" ).autocomplete({
        source: function( request, response ) {
            $.ajax({
                url: "getBatchNames.jav",
                dataType: "json",
                data: {
                        term: request.term
                      },
                success: function( data ) {                 
                    response( $.map( data.batchNameList, function( item ) {
                        return {
                            label: item.pinMasterBatchName,
                            value: item.pinMasterBatchName
                        };
                    }));
                }
            });
        },
        minLength: 1,
        open: function() {
            $( this ).removeClass( "ui-corner-all" ).addClass( "ui-corner-top" );
        },
        close: function() {
            $( this ).removeClass( "ui-corner-top" ).addClass( "ui-corner-all" );
        }
    });
});

</script>
....
<tr>
                            <td width="95%">
                            <div class="ui-widget">
                                <label style="width:35%;">Batch Name</label>
                                <form:input path="pinMasterBatchName" id="bName" class="txtBox"/>
                               </div>
                                </td>
                            </tr>

调用将转到控制器并返回 Map>.. 我将描述我所做的..

在控制器类

@RequestMapping(value="/getBatchNames.jav", method = RequestMethod.GET)
    @ResponseBody
    public Map<String, List<PinMasterData>> getZipcodes()
    {

        System.out.println("helloooo");
        List<PinMasterData> batchNameList = pinService.ListBatchesUnderClient(45);
        Map<String, List<PinMasterData>> pinMap = new HashMap<String, List<PinMasterData>>();
        pinMap.put("batchNameList", batchNameList);
        return pinMap;
    }

在我的模型课中,课堂就像

public class PinMasterData 
{

    @Id
    @GeneratedValue
    @Column ( name = "Id" )
    private Integer Id;

    @Column ( name = "BatchName" )
    private String pinMasterBatchName;

    @Column ( name = "Prefix" )
    private String Prefix;

实际上,该调用将发送到控制器并返回列表。但在那之后,jsp 页面没有显示文本字段下方的列表。问题是什么?请指导我..提前谢谢

编辑..

success: function( data ) {
                    response( $.map( data.batchNameList, function( item ) {
                        return {
                            label: item.pinMasterBatchName,
                            value: item.pinMasterBatchName
                        };
                    }));
                            alert("hai");
                }
            });

我试过这个(检查是否回调ajax)。但它也没有显示那个警报框..

4

1 回答 1

0

控件是否达到成功回调?您可以验证是否放置如下调试器语句。

success: function( data ) {                 
        response( $.map( data.batchNameList, function( item ) {
            return {
                label: item.pinMasterBatchName,
                value: item.pinMasterBatchName
};

很可能不是。尝试使用完整的回调。这样,您将知道正在返回什么状态。如果存在 json 解析错误,jQuery 不会认为 ajax 调用成功。

http://api.jquery.com/jQuery.ajax/

寻找complete(jqXHR, textStatus)

编辑

用这个代替成功。如果您对 spring 的调用已返回,则执行应该在调试器处停止。如果它没有返回,我会查看服务器日志并查看呼叫响应是否由于某种原因而失败。如果它确实返回,那么我会查看数据对象,它应该包含响应的状态(注意;我不记得确切的键名。)。查看响应文本并复制 responseText 并将其放入http://www.jsonlint.com并查看它是一个有效的 json。(希望您熟悉 firebug 以在 firefox 中进行调试)。

complete: function( jqXHR, textStatus ) {                 
        debugger;
        response( $.map( data.batchNameList, function( item ) {
            return {
                label: item.pinMasterBatchName,
                value: item.pinMasterBatchName
};
于 2012-07-04T06:09:31.400 回答