0

私は現在、AJAX を理解しようとしていますが、モデル オブジェクトへのアクセスに問題があります。

私のテストコードが行うことは、ドロップダウンリストから選択されたの値を取得することです。ボタンが押されると、この値がに渡されAjaxTest()、パラメータがモデルにアタッチされますが、モデルオブジェクトを出力するようには見えません-これはなぜだろう?と思っていました。

には間違いなく価値がありますparam

<div id="result"></div>

<script type="text/javascript">

    var param = document.getElementById("blah").value;

    var loadUrl = "/ajax/" + param;  
    $("#button").click(function(){  

        $.post(loadUrl, function(data){
            alert("Data Loaded: " + data);
            $("#result").html("<p>Param: ${output}</p>"); 
        });
    });  
</script>


@RequestMapping(value = "/ajax/{param}", method = RequestMethod.POST)
public @ResponseBody String AjaxTest(@PathVariable String param, final ModelMap model){

    model.addAttribute("output", param);
    return param;
}
4

2 に答える 2

2

クライアント側とサーバー側が少し混同されていると思います。Java は正しいように見えますが、js は jstl 式 ( ${output} ) にアクセスしようとしています。ページがレンダリングされるとき、jstl 式は解決されません。これは、Ajax 要求/応答が発生する前になります。

js は、java がモデルに追加するデータである変数「data」を操作する必要があります。このようなもの:

$("#result).html("<p>Param: " + data.output + "</p>");

これは、モデルがjsonであることを前提としています

于 2012-05-08T20:42:04.127 に答える
1

ページが最初にロードされると、JSP コードが実行されます。このコードには次の行が含まれています。

$("#button").click(function(){  

    $.post(loadUrl, function(data){
        alert("Data Loaded: " + data);
        $("#result").html("<p>Param: ${output}</p>"); 
    });
});

したがって、JSP EL コードはコンテナーによって解釈され、${output} は output 属性の値に置き換えられます。この属性は null であるため、次の HTML コードが生成され、ブラウザに送信されます。

$("#button").click(function(){  

    $.post(loadUrl, function(data){
        alert("Data Loaded: " + data);
        $("#result").html("<p>Param: </p>"); 
    });
});

ボタンをクリックすると、上記の JavaScript コードが実行されます。AJAX リクエストを ajax URL に送信し、レスポンスが返ってきたら、コールバック関数を実行します。

alert("Data Loaded: " + data);
$("#result").html("<p>Param: </p>");

そのため、サーバーから受信したデータは警告ボックスに表示され、その後、「result」で識別される HTML 要素の内容が に置き換えられ<p>Param: </p>ます。

于 2012-05-08T20:42:36.837 に答える