29554
下記のような処理を呼ぶことで確かに画面はTestへ遷移するのですが  
URLのXXXの部分が変わらずに困っています。  
localhost:8080/XXX

submitで実施すると変わったのですが、  
ajaxのfail()箇所でエラー処理などを行いたいのです…。  
ajaxでURLを変えて画面遷移させる場合はどのようにしたらよいのでしょうか。  
もしくはsubmit後に戻りを受け取れないでしょうか。

■Jabascript側

```

    $.ajax({
        type : "post",
        url: "test",
        data:JSON.stringify(data),
        dataType : "html",
        contentType: "application/json",
    }).done(function(responseData, status, jqXHR) {
        $('#page-top').html(responseData);
    }).fail(function(responseError, status, errorThrown) {
    });
    
```

■Controller側

```

    @RequestMapping(value = "/test", method = RequestMethod.POST,
            consumes = MediaType.APPLICATION_JSON_VALUE)
    public ModelAndView loadTest(ModelAndView mav) {
        mav.setViewName("test");
        return mav;
    }
    
```

□Javascript submitで実施

```

    var $html = $('<form>', {
        id : 'testForm',
        method : 'post',
        action : 'test',
        style : 'display: none;'
    });
    $('body').append($html);
    $('#testForm').submit();
    $('#testForm').remove();
    
```
CC BY-SA 3.0
2016-10-14T08:41:24.897
29553
2016-11-18T04:33:41.990
12842
question
javascript spring-boot
SpringBoot　ajaxで画面遷移させたときにURLを変えたい
ajaxは画面をリロードしないで、情報をやり取りする方法です。  
ajaxは画面遷移ではなく画面の表示を差し替えというイメージです。  
Submitは画面をリロードして表示します。  
JavaScriptでブラウザの表示URLの書き換えはセキュリティ的にできないはずです。

Submitで遷移前のJavaScriptへ処理を受け渡すことはできません。  
サーバー側で遷移先の画面を表示する際に、JavaScriptのコードを生成して、  
Loadイベント等で処理するしかないと思います。
CC BY-SA 3.0
2016-10-14T09:00:36.043
29554
2016-10-14T09:00:36.043
19001
29553
answer
フォームのある元の画面を「登録画面」、登録成功時に遷移する画面を「結果画面」と仮に呼ぶことにします。

# submitを使う場合

submitを使う場合は、元ページのJavaScriptで結果を受け取ることはできません。  
サーバー側(コントローラ)で次のような条件分岐でエラー発生時に登録画面を「再表示」するようにします。

```

    if (エラーあり) {
        mav.addObject(エラー情報);
        mav.setViewName(登録画面);
    } else {
        mav.setViewName(結果画面);
    }
    
```

SpringMVCではバリデーションの方法やException発生時のハンドラーを指定することができるので別途調べるなり質問するなりしてください。

# ajaxを使う場合

ajaxは通常、画面を遷移させずに(ブラウザのURLを変えずに)情報を更新するときに使います。  
ajaxでPOST後にURLを変えたいのであれば、次のようにして別の画面に遷移させることはできます。

```

    }).done(function(responseData, status, jqXHR) {
        location.href="結果画面のURL";
    }).fail(function(responseError, status, errorThrown) {
        alert("エラー");
    });
    
```

この場合、コントローラはPOSTを受け取るメソッドの他に、結果画面を表示する為のGETを受け取るメソッドが必要になります。
CC BY-SA 3.0
2016-10-14T13:05:15.827
29562
2016-10-14T13:05:15.827
18862
29553
answer