简单的 AJAX JQuery 示例给出了 500 个内部服务器错误
simple AJAX JQuery example gives me 500 internal server error
您好,我正在 spring mvc 项目中工作,当我点击表单中的按钮时出现此错误
500 (Internal Server Error) jquery.min.js:6
x.ajaxTransport.x.support.cors.e.crossDomain.send jquery.min.js:6
x.extend.ajax AddUser:19
doAjaxPost AddUser:41
onclick
我正在尝试做一个简单的 AJAX JQuery 示例,将用户添加到列表中,但是当我在表单
中按下添加按钮时出现该错误
这是我的控制器class:
@Controller
public class UserListController {
private List<User> userList = new ArrayList<User>();
@RequestMapping(value="AddUser",method=RequestMethod.GET)
public String showForm(){
return "AddUser";
}
@RequestMapping(value="AddUser",method=RequestMethod.POST)
public @ResponseBody String addUser(@ModelAttribute(value="user") User user, BindingResult result )
{
String returnText;
if(!result.hasErrors())
{
userList.add(user);
returnText = "User has been added to the list. Total number of users are " + userList.size();
}
else
{
returnText = "Sorry, an error has occur. User has not been added to list.";
}
return returnText;
}
@RequestMapping(value="ShowUsers")
public String showUsers(ModelMap model)
{
model.addAttribute("Users", userList);
return "ShowUsers";
}
}
这是我的 AddUser.jsp 页面
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Add Users using ajax</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.2/jquery.min.js"></script>
<!-- <script src="resources/js/libs/jquery-2.0.2.min.js"></script> -->
<script type="text/javascript">
function doAjaxPost() {
// get the form values
var name = $('#name').val();
var education = $('#education').val();
$.ajax({
type: "POST",
url: "AddUser",
data: "name=" + name + "&education=" + education,
success: function(response){
// we have the response
$('#info').html(response);
$('#name').val('');
$('#education').val('');
},
error: function(e){
alert('Error: ' + e);
}
});
}
</script>
</head>
<body>
<h1>Add Users using Ajax ........</h1>
<table>
<tr><td>Enter your name : </td><td> <input type="text" id="name"><br/></td></tr>
<tr><td>Education : </td><td> <input type="text" id="education"><br/></td></tr>
<tr><td colspan="2"><input type="button" value="Add Users" onclick="doAjaxPost()"><br/></td></tr>
<tr><td colspan="2"><div id="info" style="color: green;"></div></td></tr>
</table>
<a href="/views/ShowUsers">Show All Users</a>
</body>
</html>
和我的 MvcConfiguration class 因为我使用的是基于 java 的配置而不是 XML
@EnableWebMvc
@Configuration
@ComponentScan(basePackages = { "controllers" })
public class MvcConfig extends WebMvcConfigurerAdapter
{
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
}
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
// JSP VIEW-RESOLVER
@Bean
public InternalResourceViewResolver jspViewResolver() {
InternalResourceViewResolver bean = new InternalResourceViewResolver();
bean.setOrder(2);
bean.setPrefix("/WEB-INF/views/");
bean.setSuffix(".jsp");
return bean;
}
}
编辑:我开始一个新项目只是为了试图知道我遇到了什么错误,我在我的应用程序中删除了 spring secuirty,但我仍然可以找出问题所在。
1) 实际上我没有删除 spring 安全性 我只是开始一个新项目来尝试解决我的 url 问题
2) 我更改了控制器和 ajax 脚本中的 URL 属性
新的 RequestMapping 控制器:
@RequestMapping(value="AddUser",method=RequestMethod.GET)
我删除了值中的“/”="AddUser"
我的任何控制器中都没有“/”,如果在控制器中放置“/”,我会遇到相同的 500 内部服务器错误
这可能是因为 Java 配置中默认启用的 CSRF 保护。试试你的配置...
@Override
protected void configure(HttpSecurity http) throws Exception {
http
// ...
.csrf().disable();
}
让我知道这是否有效。
编辑**
要在 AJAX 请求中包含 CSRF 令牌,如果您使用 JSON,则需要将其放在 http header 上。 JSP 示例通常是...
<html>
<head>
<meta name="_csrf" content="${_csrf.token}"/>
<meta name="_csrf_header" content="${_csrf.headerName}"/>
</head>
然后在您的 javascript 调用中,获取此参数并将其添加到 XMLHttpRequest 的 header。
希望对您有所帮助。
就我而言,我必须将以下依赖项添加到我的 pom
<dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.2.2</version> </dependency>
您好,我正在 spring mvc 项目中工作,当我点击表单中的按钮时出现此错误
500 (Internal Server Error) jquery.min.js:6
x.ajaxTransport.x.support.cors.e.crossDomain.send jquery.min.js:6
x.extend.ajax AddUser:19
doAjaxPost AddUser:41
onclick
我正在尝试做一个简单的 AJAX JQuery 示例,将用户添加到列表中,但是当我在表单
中按下添加按钮时出现该错误这是我的控制器class:
@Controller
public class UserListController {
private List<User> userList = new ArrayList<User>();
@RequestMapping(value="AddUser",method=RequestMethod.GET)
public String showForm(){
return "AddUser";
}
@RequestMapping(value="AddUser",method=RequestMethod.POST)
public @ResponseBody String addUser(@ModelAttribute(value="user") User user, BindingResult result )
{
String returnText;
if(!result.hasErrors())
{
userList.add(user);
returnText = "User has been added to the list. Total number of users are " + userList.size();
}
else
{
returnText = "Sorry, an error has occur. User has not been added to list.";
}
return returnText;
}
@RequestMapping(value="ShowUsers")
public String showUsers(ModelMap model)
{
model.addAttribute("Users", userList);
return "ShowUsers";
}
}
这是我的 AddUser.jsp 页面
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Add Users using ajax</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.2/jquery.min.js"></script>
<!-- <script src="resources/js/libs/jquery-2.0.2.min.js"></script> -->
<script type="text/javascript">
function doAjaxPost() {
// get the form values
var name = $('#name').val();
var education = $('#education').val();
$.ajax({
type: "POST",
url: "AddUser",
data: "name=" + name + "&education=" + education,
success: function(response){
// we have the response
$('#info').html(response);
$('#name').val('');
$('#education').val('');
},
error: function(e){
alert('Error: ' + e);
}
});
}
</script>
</head>
<body>
<h1>Add Users using Ajax ........</h1>
<table>
<tr><td>Enter your name : </td><td> <input type="text" id="name"><br/></td></tr>
<tr><td>Education : </td><td> <input type="text" id="education"><br/></td></tr>
<tr><td colspan="2"><input type="button" value="Add Users" onclick="doAjaxPost()"><br/></td></tr>
<tr><td colspan="2"><div id="info" style="color: green;"></div></td></tr>
</table>
<a href="/views/ShowUsers">Show All Users</a>
</body>
</html>
和我的 MvcConfiguration class 因为我使用的是基于 java 的配置而不是 XML
@EnableWebMvc
@Configuration
@ComponentScan(basePackages = { "controllers" })
public class MvcConfig extends WebMvcConfigurerAdapter
{
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
}
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
// JSP VIEW-RESOLVER
@Bean
public InternalResourceViewResolver jspViewResolver() {
InternalResourceViewResolver bean = new InternalResourceViewResolver();
bean.setOrder(2);
bean.setPrefix("/WEB-INF/views/");
bean.setSuffix(".jsp");
return bean;
}
}
编辑:我开始一个新项目只是为了试图知道我遇到了什么错误,我在我的应用程序中删除了 spring secuirty,但我仍然可以找出问题所在。
1) 实际上我没有删除 spring 安全性 我只是开始一个新项目来尝试解决我的 url 问题
2) 我更改了控制器和 ajax 脚本中的 URL 属性
新的 RequestMapping 控制器:
@RequestMapping(value="AddUser",method=RequestMethod.GET)
我删除了值中的“/”="AddUser"
我的任何控制器中都没有“/”,如果在控制器中放置“/”,我会遇到相同的 500 内部服务器错误
这可能是因为 Java 配置中默认启用的 CSRF 保护。试试你的配置...
@Override
protected void configure(HttpSecurity http) throws Exception {
http
// ...
.csrf().disable();
}
让我知道这是否有效。
编辑**
要在 AJAX 请求中包含 CSRF 令牌,如果您使用 JSON,则需要将其放在 http header 上。 JSP 示例通常是...
<html>
<head>
<meta name="_csrf" content="${_csrf.token}"/>
<meta name="_csrf_header" content="${_csrf.headerName}"/>
</head>
然后在您的 javascript 调用中,获取此参数并将其添加到 XMLHttpRequest 的 header。
希望对您有所帮助。
就我而言,我必须将以下依赖项添加到我的 pom
<dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.2.2</version> </dependency>