I am trying to pass basic values such as id from jsp to the servlet through ajax. I tried everything but only null is being passed. Even console.log(val)
does not print anything to browser console.
我正在尝试通过ajax传递基本的值,例如从jsp到servlet的id。我尝试了所有的方法,但只传递了null。即使是console.log(val)也不会向浏览器控制台打印任何内容。
My understanding is: Web page has form values which onsubmit calls js file. js has ajax which calls the servlet and passes the data of the form. The servlet grabs data from ajax by request.getParameter(val)
我的理解是:Web页面具有onsubmit调用js文件的表单值。js具有调用servlet并传递表单数据的ajax。servlet通过request.getParameter(val)从ajax获取数据
Here is my code:
这是我的代码:
Main.jsp
Main.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>Insert title here</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js" type="text/javascript">
<script src="js/main.js" type="text/javascript"></script>
</head>
<body>
<form method="post" action="Main" id="firstform">
<h1>Enter name:</h1>
<input type="text" name="id" id="id" />
<input type="submit" name="submit"/>
</form>
</body>
</html>
main.js
main.js
var form = $('#firstform');
console.log("gi");
form.submit(function()
{
$.ajax({
url: 'Main',
data: form.serialize(),
type: 'post',
success: function(data){
console.log(data);
}
});
//return false;
});
Main.java
Main.java
package servlets;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class Main
*/
@WebServlet("/Main")
public class Main extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public Main() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
int ids;
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
String val = request.getParameter("id");
System.out.print(val);
if(val != null){
ids = Integer.parseInt(val);
out.print(ids); //
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}
}
**Problems:
1)values passed from jsp to servlet
2)console.log doesnt print anything on browser console
**问题:1)从jsp传递到servlet 2)控制台的值。log不会在浏览器控制台打印任何东西
1) works but 2) still doesnt.**
1)可以,但2)仍然不行
3 个解决方案
#1
4
in main.js type is type: 'post'
and you have written code in get method do type:'get'
在主。js类型是:' post'你在get方法中写了代码do类型:'get'
#2
2
there is no name attribute in your input field. when you are doing
在输入字段中没有name属性。当你正在做的事情
String val = request.getParameter("id");
then in servlet then it will search for the input field having name="id"
but in your form there is nothing so it will return null
;
然后,在servlet中,它将搜索具有name="id"的输入字段,但在表单中没有任何内容,因此它将返回null;
give name to the input field like
给输入字段命名
<input type="text" id="id" name="id"/>
also as sanjay has said your ajax has type post so change it to get
as well
正如sanjay所说,您的ajax有type post,所以也要修改它
#3
0
Just for the console.log(data) problem, may be $.ajax() function get confused with response type, try this:
对于console.log(data)问题,可能是$.ajax()函数与响应类型混淆,试试以下方法:
-
Ajax
Ajax
$.ajax({ url: 'Main', data: form.serialize(), type: 'post', dataType:'text/plain', success: function(data){ console.log(data); } });
-
Servlet
Servlet
response.setContentType("text/plain;charset=UTF-8");
#1
4
in main.js type is type: 'post'
and you have written code in get method do type:'get'
在主。js类型是:' post'你在get方法中写了代码do类型:'get'
#2
2
there is no name attribute in your input field. when you are doing
在输入字段中没有name属性。当你正在做的事情
String val = request.getParameter("id");
then in servlet then it will search for the input field having name="id"
but in your form there is nothing so it will return null
;
然后,在servlet中,它将搜索具有name="id"的输入字段,但在表单中没有任何内容,因此它将返回null;
give name to the input field like
给输入字段命名
<input type="text" id="id" name="id"/>
also as sanjay has said your ajax has type post so change it to get
as well
正如sanjay所说,您的ajax有type post,所以也要修改它
#3
0
Just for the console.log(data) problem, may be $.ajax() function get confused with response type, try this:
对于console.log(data)问题,可能是$.ajax()函数与响应类型混淆,试试以下方法:
-
Ajax
Ajax
$.ajax({ url: 'Main', data: form.serialize(), type: 'post', dataType:'text/plain', success: function(data){ console.log(data); } });
-
Servlet
Servlet
response.setContentType("text/plain;charset=UTF-8");