3

私はAJAXを初めて使用し、現在Spring MVCで使用することを学んでいます。私は同じ問題に直面しています。

私が取り組んでいる実際のリアルタイム要件に進む前に、理解を深めるために、AJAX + Spring MVC + jquery の組み合わせ全体を本当に基本的なものでテストしています。

ページに検索ボックスと「送信」ボタンがあります。$.get を使用して、送信時にハードコードされたテキストを Spring コントローラーに送信しています。次に、そのコントローラーから別のテキストをコールバック関数に送り返し、返されたテキストを「アラート」ボックスを使用してコールバック関数に表示しようとしています。これはうまくいかないようです。

コールバック関数が呼び出されていることがわかります(コールバック関数内の「アラート」が起動されているため)ので、制御がコントローラーに転送されてコールバックメソッドに戻ると想定していますが、できませんコントローラーから返されたテキストが、コールバック メソッドのアラート ボックスに表示されない理由を突き止めてください。コールバック メソッドで戻り値を取得するために、ここで何が欠けているのかわかりません。

これに関するあなたの応答と助けは本当に感謝しています.

ありがとう。

テキスト ボックスと送信ボタンの HTML:

    <div class = "searchcontactform">
      <form id = "searchcontactform" name="searchcontactform" method="GET">
        <input type = 'text' size='25' name = "searchlastname" id = "searchlastname" value='Enter Last Name to Search'/>
        <input type = "submit" value="Find">
      </form>
   </div>

上記のフォームの送信時にトリガーされる JavaScript:

    <script type="text/javascript" src="${pageContext.request.contextPath}/resources/scripts/jquery.min.js"></script>
    <script type="text/javascript">

    $(document).ready(function( ) {
    $('#searchcontactform').submit(function(){

         $.get("ContactList-JPA/search", {textsent : 'Hello Controller'},callback);

         function callback(textreceived){
               alert('In Callback. Text Received is: '+textreceived);
         };
    });
    });

コントローラ:

        @RequestMapping(value = "/search", method = RequestMethod.GET)
        public @ResponseBody String searchcontact(@RequestParam(value="textsent") String textsent){
        return textsent;
        }

POM.xml の Jackson 依存関係:

           <dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-mapper-asl</artifactId>
        <version>1.7.1</version>
    </dependency>

servlet-context.xml および root-context.xml で駆動されるアノテーション:

    <!-- Enables the Spring MVC @Controller programming model -->
    <annotation-driven />
4

3 に答える 3

3

まず、return falsesubmit イベントハンドラの最後に置く

$('#searchcontactform').submit(function(){

         $.get("ContactList-JPA/search", 
         {
             textsent : 'Hello Controller'
         },
         function(textreceived){
               alert('In Callback. Text Received is: '+textreceived);
         });
         return false;
    });

これが機能しない場合は、Google Chrome を使用してみてください。JavaScript アプリケーションをデバッグし、コールバック内と$.get行にブレークポイントを配置できます。

于 2012-10-30T19:41:27.297 に答える
1

問題は、タイプ String を返していることであり、何らかの理由で Spring/Jackson が応答に変換するときに気に入らないことだと思います。問題を解決するには、次のことを行う必要があります。

@RequestMapping(value = "/search", method = RequestMethod.GET)
public @ResponseBody List<String> searchcontact(@RequestParam(value="textsent") String textsent){
    return Arrays.asList( new String[] { textsent } );
}

それは理想的ではなく、かなり面倒です。当時の私にとっては回避策が良かったので、なぜこれが起こるのかを実際には調べていません。

更新:ここで間違っていることをお詫びします。戻り値がJSONになるとはまったく想定していないため、コントローラーを変更しても影響はありません。

于 2012-10-30T20:51:33.867 に答える
0

返されたデータをパラメーターとしてコールバックに渡してみてください。

$(document).ready(function( ) {
    $('#searchcontactform').submit(function(){

        $.get("ContactList-JPA/search", {textsent : 'Hello Controller'},
           function(data){
              callback(data);
        });

        function callback(textreceived){
           alert('In Callback. Text Received is: '+textreceived);
        };
    });
});

コールバック関数を無名関数としてセットアップして整理することもできます。

$(document).ready(function( ) {
    $('#searchcontactform').submit(function(){

        $.get("ContactList-JPA/search", {textsent : 'Hello Controller'},
           function(data){
              alert('In Callback. Text Received is: '+data);
        });
    });
});
于 2012-10-30T19:18:39.017 に答える