Maison  >  Article  >  Java  >  Comment résoudre le problème de SpringBoot qui ne saute pas lorsque Ajax est présent

Comment résoudre le problème de SpringBoot qui ne saute pas lorsque Ajax est présent

王林
王林avant
2023-05-25 20:49:111177parcourir

Description du problème

J'ai récemment essayé d'utiliser SpringBoot comme système de gestion backend Comme je n'ai pas encore appris VUE, la page frontale utilise le mode thymeleaf+ajax. J'ai rencontré un problème lors du développement de la page de connexion il y a deux jours. Après m'être connecté, selon le processus normal, je devrais accéder à la page d'accueil du contrôleur, mais ma page de connexion ne saute pas. Il n'y a aucun problème avec la logique du contrôleur

@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"
        }
    }
}

La logique en 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)
    }
})

Les informations renvoyées par la console

Comment résoudre le problème de SpringBoot qui ne saute pas lorsque Ajax est présent

Solution

La solution est donnée ici en premier, et la raison sera expliquée à la fin . Ajoutez une méthode mainPage dans le contrôleur, correspondant à main.html, pour résoudre le problème.

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

Ensuite, appelez ce contrôleur dans le rappel de réussite Ajax pour terminer le saut.

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

Cause le tri

Au début, j'ai pensé qu'il y avait un problème avec l'écriture du contrôleur, puis j'ai modifié la configuration du contrôleur de différentes manières. Finalement, j'ai découvert que peu importe la façon dont je l'avais modifié, c'était le cas. aucun effet, et j'ai trouvé que si j'appelais main.html directement dans le navigateur, il n'y avait aucun problème avec le chemin du contrôleur. Dans ce cas, j'ai pensé que cela pourrait être un problème Ajax. Afin de vérifier s'il s'agit d'un problème Ajax, j'ai défini un point d'arrêt dans le code où le rappel Ajax réussit. Je veux voir quelles sont les données renvoyées par l'arrière-plan. Le voyez-vous ? page html. Tous sont renvoyés à Ajax, c'est-à-dire que lors de l'utilisation d'Ajax, le contrôleur SpringBoot ne restitue pas la page, mais renvoie la structure de la page cible. Il est étrange qu'il puisse sauter.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer