将JavaScript的响应变量传递给Spring控制器函数
将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'
感谢回复。
问题的原因可能是使用了新版本的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"); } });
如果这篇文章对您有帮助,请接受该回答。