>Java >java지도 시간 >Ajax가 있을 때 SpringBoot가 점프하지 않는 문제를 해결하는 방법

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

王林
王林앞으로
2023-05-25 20:49:111207검색

문제 설명

최근에 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으로 문의하시기 바랍니다. 삭제