ホームページ  >  記事  >  Java  >  Ajax が存在するときに SpringBoot がジャンプしない問題を解決する方法

Ajax が存在するときに SpringBoot がジャンプしない問題を解決する方法

王林
王林転載
2023-05-25 20:49:111144ブラウズ

問題の説明

最近 SpringBoot をバックエンド管理システムとして使用しようとしましたが、VUE をまだ学習していないため、フロントエンド ページは thymeleaf ajax モードを使用しています。 2 日前ログイン ページを開発中に問題が発生しました。ログイン後、通常のプロセスに従って、コントローラーのホームページにジャンプするはずですが、ログイン ページがジャンプしません。コントローラーのロジックには問題ありません

@Controller
class LoginController {
    @Resource
    lateinit var adminService: AdminService
    @RequestMapping("/login",method = [RequestMethod.POST])
    fun login(@RequestParam name:String,@RequestParam password:String):String?{
        val admin=adminService.login(name,password)
        return if (admin==null){
            ""
        }else{
        //一般情况下是可以直接渲染到main.html的,但是添加了Ajax之后跳转就会失效
            "main"
        }
    }
}

Ajaxのロジック

$.ajax({
    method: 'POST',
    url: 'http://localhost:8080/login',
    data: {
        name: $('[name="username"]').val(),
        password: $('[name="password"]').val()
    },
    success:function (r) {
        console.log(r)
    },
    error:function (result) {
        alert(result)
    }
})

コンソールから返される情報

Ajax が存在するときに SpringBoot がジャンプしない問題を解決する方法

#解決策

最初に解決策を示し、最後に理由を説明します。 main.html に対応する mainPage メソッドをコントローラーに追加すると、問題を解決できます。

@RequestMapping("/main")
fun mainPage():String{
    return "main"
}

次に、Ajax 成功コールバックでこのコントローラーを呼び出して、ジャンプを完了します。

success:function (r) {
    window.location.href="http://localhost:8080/main" rel="external nofollow" 
},

原因の整理

最初はコントローラーに問題があるのではないかと思い、コントローラーの設定をいろいろ変更しましたが、最終的にはどうやっても問題がないことがわかりました。修正しても効果がなく、閲覧してみたところ、main.htmlのコントローラーパスをサーバー内で直接呼び出しても問題ないのですが、この場合はAjaxの問題なのでしょうか。 Ajax の問題かどうかを確認するために、Ajax コールバックが成功したコードにブレークポイントを設定しました。バックグラウンドから返されたデータが何であるかを確認したいと思います。

Ajax が存在するときに SpringBoot がジャンプしない問題を解決する方法

Do you see it? , コントローラーは main.html ページ全体を Ajax に返します。つまり、Ajax を使用する場合、SpringBoot コントローラーはページをレンダリングせず、ターゲット ページ構造を返します。ジャンプする。奇妙だ。

以上がAjax が存在するときに SpringBoot がジャンプしない問題を解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。