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
};

そうではない可能性があります。完全なコールバックを使用してみてください。これにより、どのステータスが返されているかがわかります。jQuery は、json 解析エラーがある場合、ajax 呼び出しが成功したとは見なしません。

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

探すcomplete(jqXHR, textStatus)

編集

成功をこれに置き換えます。spring への呼び出しが返された場合、実行はデバッガーで停止する必要があります。返されない場合は、サーバー ログを調べて、呼び出し応答が何らかの理由で失敗したかどうかを確認します。返された場合は、データ オブジェクトを確認します。応答のステータスが含まれている必要があります (注: 正確なキー名は覚えていません)。応答テキストを見て、responseText をコピーしてhttp://www.jsonlint.comに配置し、有効な json であることを確認します。(firefoxでデバッグするためのfirebugに精通していることを願っています)。

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