최근에 SpringBoot를 백엔드 관리 시스템으로 사용하려고 했습니다. 아직 VUE를 배우지 않았기 때문에 프런트엔드 페이지에서는 thymeleaf+ajax 모드를 사용합니다. 이틀 전 로그인 페이지를 개발할 때 문제가 발생했습니다. 로그인 후 정상적인 프로세스에 따라 컨트롤러에서 홈페이지로 이동해야 하는데 로그인 페이지가 점프하지 않습니다. 컨트롤러의 로직에는 문제가 없습니다
@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 콜백이 성공한 코드에 중단점을 설정했는데, 백그라운드에서 반환된 데이터가 무엇인지 확인하고 싶습니다. html 페이지가 모두 Ajax로 반환됩니다. 즉, Ajax를 사용할 때 SpringBoot 컨트롤러가 페이지를 렌더링하지 않고 대상 페이지 구조를 반환한다는 것이 이상합니다.
위 내용은 Ajax가 있을 때 SpringBoot가 점프하지 않는 문제를 해결하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!