jQuery 方法无法将数据传送到 REST 服务器
jQuery method can not deliver data to REST server
这些代码是关于 jQuery JavaScript 将数据传送到 Spring Boot 的 RESTful 服务器。首先,以下代码是 Rest Controller 源代码。
@RestController
@RequestMapping(value="/rest/user")
public class UserRestController {
@Autowired
private UserService userService;
@PostMapping("login")
public ResponseEntity<Boolean> authenticated(@RequestBody User user) {
System.out.println(user.getUsername() + user.getPassword()); // return values are NULL
Boolean blogin = userService.authenticate(user.getUsername(), user.getPassword());
if(!blogin)
return new ResponseEntity<Boolean>(blogin, HttpStatus.NOT_ACCEPTABLE);
return new ResponseEntity<Boolean>(blogin, HttpStatus.OK);
}
}
和 jQuery JavaScript 代码。
== index.html ==
<html>
<head>
<meta charset="UTF-8">
<title>Login</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src="/js/ajaxlogin.js"></script>
</head>
<body>
<h1>Please sign in</h1>
<form method="post" id="loginForm" th:object="${loginForm}">
<div><label for="username">username</label></div>
<input id="username" type="text" name="username" th:value="*{username}"/>
<div><label for="password" th:value="*{username}">password</label></div>
<input id="password" type="password" name="password" th:value="*{password}" />
<div>
<input type="submit" value="Login" />
<a href="index.html" th:href="@{/posts}">Cancel</a>
</div>
</form>
<div id=helloUserDiv></div>
</body>
</html>
== ajaxlogin.js ==
$(document).ready(function () {
$("#loginForm").submit(function (event) {
//stop submit the form, we will post it manually.
event.preventDefault();
ajax_login_submit();
});
});
function ajax_login_submit() {
var user = {
username : $("#username").val,
password : $("#password").val
}
$.ajax({
type: "POST",
contentType: "application/json",
url: "rest/user/login/",
data: JSON.stringify(user),
dataType: 'json',
cache: false,
timeout: 600000,
success: function (data) {
var resultJson = JSON.stringify(data);
$('#helloUserDiv').html(resultJson);
console.log("SUCCESS : ", data);
alert(data);
},
error: function (e) {
var resultJson = e.responseText;
$('#helloUserDiv').html(resultJson);
console.log("ERROR : ", e);
}
});
}
但是结果是失败的。错误代码 406。我不确定这些代码的错误是什么。
已更新
我修改了 JavaScript 如下,
function ajax_login_submit() {
var user = {
username: $("#username").val(),
password: $("#password").val()
};
console.log(user.username);
console.log(user.password);
console.log(user);
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: "rest/user/login",
data: JSON.stringify(user),
//dataType: 'json',
success: function (data) {
var resultJson = JSON.stringify(data);
$('#helloUserDiv').html(resultJson);
console.log("SUCCESS : ", data);
alert(data);
},
error: function (e) {
var resultJson = e.responseText;
$('#helloUserDiv').html(resultJson);
console.log("ERROR : ", e);
}
});
}
console.log(user)
returns以下正确的值,
{用户名:"joseph",密码:"password"}
但是RestController带来了一些问题。
@RestController
@RequestMapping(value="/rest/user")
public class UserRestController {
@Autowired
private UserService userService;
@PostMapping("login")
public ResponseEntity<Boolean> authenticated(@RequestBody User user) {
System.out.println(user.getUsername() + user.getPassword()); // return values are "josephnull"
Boolean blogin = userService.authenticate(user.getUsername(), user.getPassword());
System.out.println(user.getUsername() + user.getPassword());
这一行 returns "josephnull" 即我的意思是密码值为空。我不明白为什么密码值为空。
在你的 jquery $.ajax 调用中尝试放置
data: {user :JSON.stringify(user)},
而不是 data: JSON.stringify(user) ,
或 data: {user : user},
根据您的需要
那么代码将是:
function ajax_login_submit() {
var user = {
username : $("#username").val,
password : $("#password").val
}
$.ajax({
type: "POST",
contentType: "application/json",
url: "rest/user/login/",
data: data: {user :JSON.stringify(user)},
dataType: 'json',
cache: false,
timeout: 600000,
success: function (data) {
var resultJson = JSON.stringify(data);
$('#helloUserDiv').html(resultJson);
console.log("SUCCESS : ", data);
alert(data);
},
error: function (e) {
var resultJson = e.responseText;
$('#helloUserDiv').html(resultJson);
console.log("ERROR : ", e);
}
});
}
您可以通过使用 FormData() 来 post 数据,例如:
var data = new FormData();
data.set('key', 'value');
如果你想发送图片那么
data.append('image', imageFile);
然后设置header headers: {'Content-Type': 'multipart/form-data'
不带stringify发送
它应该是这样的:
$.ajax({
type: "POST",
contentType: "multipart/form-data",
url: "to/url",
data: data,
success: function (data) {
alert(data);
}
});
错误代码406
表示数据不可接受。这是详细信息。
Error code 406 details.
从您的代码中删除 dataType: 'json'
,它将起作用。通过这一行,代码抛出 parse error
一旦我删除它,错误消失并且响应成功。
这是工作代码,忽略 url
因为我用过我的。
$.ajax({
type: "POST",
contentType: "application/json",
url: "hms/raw/login",
data: JSON.stringify(user),
cache: false,
timeout: 600000,
success: function (data) {
var resultJson = JSON.stringify(data);
$('#helloUserDiv').html(resultJson);
console.log("SUCCESS : ", data);
alert(data);
},
error: function (e) {
var resultJson = e.responseText;
$('#helloUserDiv').html(resultJson);
console.log("ERROR : ", e);
console.log(JSON.stringify(e));
}
});
这些代码是关于 jQuery JavaScript 将数据传送到 Spring Boot 的 RESTful 服务器。首先,以下代码是 Rest Controller 源代码。
@RestController
@RequestMapping(value="/rest/user")
public class UserRestController {
@Autowired
private UserService userService;
@PostMapping("login")
public ResponseEntity<Boolean> authenticated(@RequestBody User user) {
System.out.println(user.getUsername() + user.getPassword()); // return values are NULL
Boolean blogin = userService.authenticate(user.getUsername(), user.getPassword());
if(!blogin)
return new ResponseEntity<Boolean>(blogin, HttpStatus.NOT_ACCEPTABLE);
return new ResponseEntity<Boolean>(blogin, HttpStatus.OK);
}
}
和 jQuery JavaScript 代码。
== index.html ==
<html>
<head>
<meta charset="UTF-8">
<title>Login</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src="/js/ajaxlogin.js"></script>
</head>
<body>
<h1>Please sign in</h1>
<form method="post" id="loginForm" th:object="${loginForm}">
<div><label for="username">username</label></div>
<input id="username" type="text" name="username" th:value="*{username}"/>
<div><label for="password" th:value="*{username}">password</label></div>
<input id="password" type="password" name="password" th:value="*{password}" />
<div>
<input type="submit" value="Login" />
<a href="index.html" th:href="@{/posts}">Cancel</a>
</div>
</form>
<div id=helloUserDiv></div>
</body>
</html>
== ajaxlogin.js ==
$(document).ready(function () {
$("#loginForm").submit(function (event) {
//stop submit the form, we will post it manually.
event.preventDefault();
ajax_login_submit();
});
});
function ajax_login_submit() {
var user = {
username : $("#username").val,
password : $("#password").val
}
$.ajax({
type: "POST",
contentType: "application/json",
url: "rest/user/login/",
data: JSON.stringify(user),
dataType: 'json',
cache: false,
timeout: 600000,
success: function (data) {
var resultJson = JSON.stringify(data);
$('#helloUserDiv').html(resultJson);
console.log("SUCCESS : ", data);
alert(data);
},
error: function (e) {
var resultJson = e.responseText;
$('#helloUserDiv').html(resultJson);
console.log("ERROR : ", e);
}
});
}
但是结果是失败的。错误代码 406。我不确定这些代码的错误是什么。
已更新
我修改了 JavaScript 如下,
function ajax_login_submit() {
var user = {
username: $("#username").val(),
password: $("#password").val()
};
console.log(user.username);
console.log(user.password);
console.log(user);
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: "rest/user/login",
data: JSON.stringify(user),
//dataType: 'json',
success: function (data) {
var resultJson = JSON.stringify(data);
$('#helloUserDiv').html(resultJson);
console.log("SUCCESS : ", data);
alert(data);
},
error: function (e) {
var resultJson = e.responseText;
$('#helloUserDiv').html(resultJson);
console.log("ERROR : ", e);
}
});
}
console.log(user)
returns以下正确的值,
{用户名:"joseph",密码:"password"}
但是RestController带来了一些问题。
@RestController
@RequestMapping(value="/rest/user")
public class UserRestController {
@Autowired
private UserService userService;
@PostMapping("login")
public ResponseEntity<Boolean> authenticated(@RequestBody User user) {
System.out.println(user.getUsername() + user.getPassword()); // return values are "josephnull"
Boolean blogin = userService.authenticate(user.getUsername(), user.getPassword());
System.out.println(user.getUsername() + user.getPassword());
这一行 returns "josephnull" 即我的意思是密码值为空。我不明白为什么密码值为空。
在你的 jquery $.ajax 调用中尝试放置
data: {user :JSON.stringify(user)},
而不是 data: JSON.stringify(user) ,
或 data: {user : user},
根据您的需要
那么代码将是:
function ajax_login_submit() {
var user = {
username : $("#username").val,
password : $("#password").val
}
$.ajax({
type: "POST",
contentType: "application/json",
url: "rest/user/login/",
data: data: {user :JSON.stringify(user)},
dataType: 'json',
cache: false,
timeout: 600000,
success: function (data) {
var resultJson = JSON.stringify(data);
$('#helloUserDiv').html(resultJson);
console.log("SUCCESS : ", data);
alert(data);
},
error: function (e) {
var resultJson = e.responseText;
$('#helloUserDiv').html(resultJson);
console.log("ERROR : ", e);
}
});
}
您可以通过使用 FormData() 来 post 数据,例如:
var data = new FormData();
data.set('key', 'value');
如果你想发送图片那么
data.append('image', imageFile);
然后设置header headers: {'Content-Type': 'multipart/form-data'
不带stringify发送
它应该是这样的:
$.ajax({
type: "POST",
contentType: "multipart/form-data",
url: "to/url",
data: data,
success: function (data) {
alert(data);
}
});
错误代码406
表示数据不可接受。这是详细信息。
Error code 406 details.
从您的代码中删除 dataType: 'json'
,它将起作用。通过这一行,代码抛出 parse error
一旦我删除它,错误消失并且响应成功。
这是工作代码,忽略 url
因为我用过我的。
$.ajax({
type: "POST",
contentType: "application/json",
url: "hms/raw/login",
data: JSON.stringify(user),
cache: false,
timeout: 600000,
success: function (data) {
var resultJson = JSON.stringify(data);
$('#helloUserDiv').html(resultJson);
console.log("SUCCESS : ", data);
alert(data);
},
error: function (e) {
var resultJson = e.responseText;
$('#helloUserDiv').html(resultJson);
console.log("ERROR : ", e);
console.log(JSON.stringify(e));
}
});