将JavaScript的响应变量传递给Spring控制器函数

6 浏览
0 Comments

将JavaScript的响应变量传递给Spring控制器函数

以下javascript代码与facebook登录窗口一起工作,并允许用户登录。响应值被捕获,我知道它起作用,因为它在设置的位置显示警报,但我无法将值传递回控制器方法。

@ RequestMapping(value =“/ getAccessToken”,method = RequestMethod.POST)

public @ResponseBody String getAccessToken(@RequestBody String token){

System.out.println(token);

return token;

}

调用的javascript方法:

function doLogin(){

FB.login(function(response){

alert(response);

console.log(response);

if(response.authResponse){

alert(response.authResponse.userID);

alert(response.authResponse.accessToken);

var Token = response.authResponse.accessToken;

alert(Token);

$ .ajax({

type:“POST”,

url:“/ HelloController / getAccessToken”,

data:Token,

success:function(result){

alert(“Token”);

},

error:function(result){

alert(“糟糕”);

}

});

document.getElementById('loginBtn').style。

display ='none';

getUserData();

}},{perms:'manage_pages',

scope:'email,public_profile',return_scopes:true});

};

我得到的错误是:

警告25660 --- [nio-8080-exec-9]

o.s.web.servlet.PageNotFound:不支持的请求方法'POST'

感谢回复。

0
0 Comments

问题的原因可能是使用了新版本的JQuery,该版本默认将请求数据发送为post表单数据而不是JSON。尝试将ajax调用更改为以下内容。如果这是问题的原因,您应该会看到404错误,因为控制器无法识别表单数据。

解决方法是将ajax调用中的数据参数改为JSON字符串,并使用POST方法发送请求。此外,还需要将traditional参数设置为true,以确保数据以正确的方式发送。

参考:[Send JSON data via POST (ajax) and receive json response from Controller (MVC)](https://stackoverflow.com/questions/8517071)

$.ajax({
    type: "POST",
    traditional: true,
    url: "/HelloController/getAccessToken",
    data: JSON.stringify(Token),
    success: function (result) {
       alert("Token");
    },
    error: function (result) {
      alert("oops");
    }
});

如果这篇文章对您有帮助,请接受该回答。

0