ホームページ >Java >&#&チュートリアル >Ajax が存在するときに SpringBoot がジャンプしない問題を解決する方法
最近 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) } })
コンソールから返される情報
#解決策最初に解決策を示し、最後に理由を説明します。 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 コールバックが成功したコードにブレークポイントを設定しました。バックグラウンドから返されたデータが何であるかを確認したいと思います。
Do you see it? , コントローラーは main.html ページ全体を Ajax に返します。つまり、Ajax を使用する場合、SpringBoot コントローラーはページをレンダリングせず、ターゲット ページ構造を返します。ジャンプする。奇妙だ。
以上がAjax が存在するときに SpringBoot がジャンプしない問題を解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。