1

基本的に、Spring Web アプリケーションに ajax を実装しようとしているだけです。テスト目的で、リンク/ボタンを押したときに個人の「ID」値に基づいて「ユーザー」情報を取得するためだけのコードを書いてみました。サーバー側のエラーであり、コントローラーに何か問題があると想定していますが、完全には確信が持てず、これを機能させるには助けが必要です. これは、テスト用の現在の JSP ページです。

<c:forEach var="user" items="${users}">
        <tr>
            <td><c:out value="${user.id}" /></td>
            <td><c:out value="${user.name}"/></td>
            <td><c:out value="${user.username}"/></td>
            <td><c:out value="${user.email}"/></td>
            <td><c:out value="${user.dob}"/></td>
            <td><c:out value="${user.authority}"/></td>
            <td>
                <a class="update" href="<c:url value="/viewUser"><c:param name="id" value="${user.id}"/></c:url>"><button>Update</button></a>
            </td>
            <td>
                <a class="delete" href="<c:url value="/deleteUser"><c:param name="id" value="${user.id}"/></c:url>"><button>Delete</button></a>
            </td>
            <td>
                <a class="ajax" href="<c:url value="/ajax"><c:param name="id" value="${user.id}"/></c:url>">Ajax</a>
            </td>
        </tr>
    </c:forEach>
</table>

<script type="text/javascript">
    $(document).ready(function(){
        $('.ajax').click(function(e){
            e.preventDefault();
            $.ajax({
                url:"http://localhost:8080/SDP_v1.7/ajax",
                type: 'GET',
                dataType:'json',
                contentType: 'application/json',
                mimeType: 'application/json',
                succes: function(user){
                    alert(user.id + " + " + user.username);
                },
                error:function(user,status,er) { 
                    alert("error: "+user+" status: "+status+" er:"+er);
                }
            });
        });
    });
</script>

これは私のコントローラクラスです:

@RequestMapping("/viewUser")
public String updateUser(Model model, @RequestParam(value = "id", required = false) Integer id) {

    User user = usersService.getUser(id);

    model.addAttribute("user", user);

    return "settings";
}

@RequestMapping(value = "/ajax", method = RequestMethod.GET)
public @ResponseBody User getUser(@PathVariable Integer id) {
    return usersService.getUser(id);
}

これはコンソールにポップアップする私のエラーです:

GET http://localhost:8080/SDP_v1.7/ajax 403 (Forbidden) jquery.js:5

send jquery.js:5 x.extend.ajax jquery.js:5 (匿名関数) users:106 x.event.dispatch jquery.js:4 v.handle

基本的に、フォームを使用して各ユーザーの情報をポップアップ モーダルにロードすることを目指しています。最初にこのステップを機能させる必要がありますが。ありがとう

4

3 に答える 3

1

ポート 80 の Web サーバーから来ていますか? その場合、異なるポートにいることはまだカウントされるため、クロスサイト スクリプティングの問題に対処しています。jQuery で JSONPを見たいと思うかもしれません。

編集:ここにチュートリアルがあります。

于 2013-10-03T11:06:10.467 に答える
0

まず、コントローラーが間違っています。マッピングにパス変数が含まれていないため、何にマップする必要がありますか?

@RequestMapping(value = "/ajax/{id}", method = RequestMethod.GET)
public @ResponseBody User getUser(@PathVariable Integer id) {
    return usersService.getUser(id);
}

/ajax を呼び出しているため、リクエストは間違っていますが、/ajax/<userid>他のようなものを呼び出す必要があるため、コントローラーは必要なユーザーを知ることができません。

<script type="text/javascript">
    $(document).ready(function(){
        $('.ajax').click(function(e){
            var url = $(this).attr("href");
            e.preventDefault();
            $.ajax({
                url: url,
                type: 'GET',
                dataType:'json',
                contentType: 'application/json',
                mimeType: 'application/json',
                succes: function(user){
                    alert(user.id + " + " + user.username);
                },
                error:function(user,status,er) { 
                    alert("error: "+user+" status: "+status+" er:"+er);
                }
            });
        });
    });
</script>

3番目に、idなしでURLを生成するため、jspが間違っています(パス変数ではなくリクエストパラメーター)。使い<spring:url ../>やすさのために使用します。

<a class="ajax" href="<spring:url value="/ajax/{id}"><spring:param name="id" value="${user.id}"/></spring:url>">Ajax</a>

Spring Reference Guideを読むことを強くお勧めします。Web の章で問題が明らかになるはずです。呼び出しが AJAX を介して行われるかどうかは問題ではありません。最初にマッピングを修正してから、AJAX を追加してください。

于 2013-10-03T11:11:18.420 に答える
0
succes: function(user){
                alert(user.id + " + " + user.username);
            },

成功ではなく成功かもしれません

于 2014-02-24T21:56:28.620 に答える