> Java > java지도 시간 > 본문

Ajax가 있을 때 SpringBoot가 점프하지 않는 문제를 해결하는 방법

王林
풀어 주다: 2023-05-25 20:49:11
앞으로
1187명이 탐색했습니다.

문제 설명

최근에 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)
    }
})
로그인 후 복사

콘솔에서 반환되는 정보

Ajax가 있을 때 SpringBoot가 점프하지 않는 문제를 해결하는 방법

Solution

해결책은 여기서 먼저 제시하고, 그 이유는 마지막에 설명하겠습니다. . 문제를 해결하려면 컨트롤러에 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:yisu.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿