我已经做了一段时间的学校项目,但是我的登录页面似乎无法正常工作。
它总是给我一个解析错误,如下所示: Error Login AJAX
对于我的登录,我使用一个连接到sql-server数据库的简单servlet。 在Servlet端,我检查了调试模式。一切正常。 这是servlet代码:
package servlets;
import DAO.Model;
import com.google.gson.Gson;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.json.simple.JSONObject;
public class login extends HttpServlet
{
private static PrintWriter out;
private static String message;
private static Gson gson;
private JSONObject simpleJO;
Model model = null;
public void init(ServletConfig conf) throws ServletException
{
super.init(conf);
ServletContext ctx = conf.getServletContext();
String URL = ctx.getInitParameter("DB-URL");
model = new Model(URL);
}
/**
* Handles the HTTP <code>POST</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
simpleJO = new JSONObject();
gson = new Gson();
String usernameStudente = request.getParameter("usernameStudente");
String emailDocente = request.getParameter("emailDocente");
String mansioneUtente = request.getParameter("mansioneUtente");
String passwordUtente = request.getParameter("passwordUtente");
response.setContentType("text/html; charset=UTF-8");
out = response.getWriter();
System.out.println("Username: " + usernameStudente);
System.out.println("Password: " + passwordUtente);
System.out.println("Mansione: " + mansioneUtente);
if(mansioneUtente.equals("Studente"))
{
if(model.loginStudenti(usernameStudente, passwordUtente))
{
simpleJO.put("status",true);
simpleJO.put("error", "Login Studente Success");
}
else
{
simpleJO.put("status",false);
simpleJO.put("error", "Login Studente Failed");
}
}
else if(mansioneUtente.equals("Docente"))
{
if(model.loginDocenti(emailDocente, passwordUtente))
{
simpleJO.put("status",true);
simpleJO.put("error", "Login Docente Success");
}
else
{
simpleJO.put("status",false);
simpleJO.put("error", "Login Docente Failed");
}
}
message = gson.toJson(simpleJO);
System.out.println(message);
}
}
这是我的JavaScript文件:
$(document).ready(function()
{
$('#mansioneUtente').change(function()
{
if($('#mansioneUtente').val() == 'Studente')
{
$('#usernameStudente').attr('disabled',false);
$('#emailDocente').attr('disabled',true);
}
else if($('#mansioneUtente').val() == 'Docente')
{
$('#usernameStudente').attr('disabled',true);
$('#emailDocente').attr('disabled',false);
}
}).trigger('change');
$('#btnLoginUtente').click(function()
{
processUserLogin();
});
});
function processUserLogin()
{
var sdata = {
mansioneUtente: $('#mansioneUtente').val(),
usernameStudente: $('#usernameStudente').val(),
emailDocente: $('#emailDocente').val(),
passwordUtente: $('#passwordUtente').val()};
$.ajax(
{
url:'login',
type:'POST',
data: sdata,
dataType: 'JSON',
async: false,
success: function(data)
{
if(data.status === true)
alert(data.error);
else
alert(data.error);
},
error: function (jqXHR, textStatus, errorThrown,data)
{
alert("JQXHR: " + jqXHR + " TEXT STATUS: " + textStatus + " ERROR THROWN: " + errorThrown + " DATA: " + data);
}
});
}
如您所见,在警报中,它给了我:未定义数据。 有帮助吗?
答案 0 :(得分:0)
在ajax调用中,您提到了期望的数据类型为 JSON 。
dataType: 'JSON',
但是您的servlet没有返回任何东西。这就是您未定义数据的原因。
解决方案是使您的servlet返回JSON数据。
在函数顶部带有@ResponseBody
注释。将所需的数据以JSON格式绑定到响应对象。
JSONObject jsonObj = new JSONObject();
jsonObj.put("ObjName", yourObject);
response.setContentTyp("application/json");
response.getWriter().write(jsonObj.toString());