我想在我的網頁上創建一個登錄動作,它應該調用一個servlet來傳遞它所需的參數,並返回一個JSON對象給瀏覽器。我正在使用jQuery的$ .getJSON()方法來實現此目的。jQuery getJSON方法沒有反應
這裏是形式 -
<form class="form" method="post" id="loginFrm" name="loginFrm">
<div class="form-group">
<label for="username">Email</label>
<input name="email" id="email" type="text" placeholder="Email" style="color: black;">
</div>
<div class="form-group">
<label for="password">Password</label>
<input name="password" id="password" type="password" placeholder="Password" style="color: black;"><br>
<span class="text-danger" id="error-box"></span>
</div>
<button id="btnLogin" class="btn btn-primary" style="margin-top: 17px;">Login</button>
</form>
這裏是在點擊後的登錄按鈕 -
// Add an onlick handler to the login button
$('#btnLogin').on('click', loginAction);
function loginAction() {
var userEmail = $('#email').val();
var userPassword = $('#password').val();
if (userEmail == "") {
$('#error-box').html("Please enter your email");
$('#email').focus();
return false;
}
if (userPassword == "") {
$('#error-box').html("Please enter your password");
$('#password').focus();
return false;
}
var credentials = $('#loginFrm').serialize();
// alert(credentials);
var url = "/login?" + credentials;
$.getJSON(url, function (data) {
alert("Inside getJSON callback method");
alert(data);
});
}
還執行JavaScript代碼爲我登錄的HTML,這裏是從LoginServlet代碼。 該servlet映射到URL圖案 - /登錄
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
logger.info("Inside LoginServlet");
response.setContentType("application/json");
String email = request.getParameter("email") == null ? "" : request.getParameter("email");
String password = request.getParameter("password") == null ? "" : request.getParameter("password");
logger.info("email:: " + email + " password::" + password);
Customer customer = null;
Developer developer = null;
JsonObjectBuilder objBuilder = Json.createObjectBuilder();
JsonObject responseObject = null;
PrintWriter pout = response.getWriter();
if (!email.equals("") && !password.equals("")) {
boolean loginSuccess = false;
logger.info("Trying to load customer entity");
customer = ofy().load().key(Key.create(Customer.class, email)).now();
if (null == customer) {
logger.info("customer entity not found. Trying to load developer entity");
developer = ofy().load().key(Key.create(Developer.class, email)).now();
if (developer != null) {
logger.info("developer entity found");
if (developer.getPassword().equals(password)) {
logger.info("Developer login successful");
loginSuccess = true;
responseObject = objBuilder.add("status", "success").add("userType", "developer").add("forwardUrl", "Home.jsp").build();
logger.info("JsonObject constructed as:: " + responseObject);
pout.println(responseObject.toString());
pout.flush();
// request.getRequestDispatcher("Home.jsp").forward(request, response);
}
}
} else {
if (customer.getPassword().equals(password)) {
logger.info("Customer login successful");
loginSuccess = true;
responseObject = objBuilder.add("status", "success").add("userType", "customer").add("forwardUrl", "Home.jsp").build();
logger.info("JsonObject constructed as:: " + responseObject);
pout.println(responseObject.toString());
pout.flush();
// request.getRequestDispatcher("Home.jsp").forward(request, response);
}
}
if (!loginSuccess) {
// Login Failure
responseObject = objBuilder.add("status", "faliure").build();
logger.info("Login Faliure. JsonObject constructed as:: " + responseObject);
pout.println(responseObject.toString());
pout.flush();
}
}
}
我的問題是,在Servlet似乎並沒有被返回的getJSON響應()。 Firefox的網絡選項卡不顯示來自請求的任何響應。 它甚至不打印請求的HTTP狀態碼。
不過,我知道該請求到達LoginServlet,從下面的日誌 -
[INFO] Jul 20, 2015 10:42:13 PM com.allissues.logic.LoginServlet doGet
[INFO] INFO: Request inside doGet method. Calling doPost with it
[INFO] Jul 20, 2015 10:42:13 PM com.allissues.logic.LoginServlet doPost
[INFO] INFO: Inside LoginServlet
[INFO] Jul 20, 2015 10:42:13 PM com.allissues.logic.LoginServlet doPost
[INFO] INFO: email:: [email protected] password::prateek
[INFO] Jul 20, 2015 10:42:13 PM com.allissues.logic.LoginServlet doPost
[INFO] INFO: Trying to load customer entity
[INFO] Jul 20, 2015 10:42:13 PM com.allissues.logic.LoginServlet doPost
[INFO] INFO: customer entity not found. Trying to load developer entity
[INFO] Jul 20, 2015 10:42:13 PM com.allissues.logic.LoginServlet doPost
[INFO] INFO: developer entity found
[INFO] Jul 20, 2015 10:42:13 PM com.allissues.logic.LoginServlet doPost
[INFO] INFO: Developer login successful
[INFO] Jul 20, 2015 10:42:13 PM com.allissues.logic.LoginServlet doPost
[INFO] INFO: JsonObject constructed as:: {"status":"success","userType":"developer","forwardUrl":"Home.jsp"}
是明顯的,但是從AJAX請求的響應是空的,我有麻煩了解哪裏我的代碼出錯了。
任何人都可以幫助我嗎?提前致謝。
編輯 此外,當我從網絡訪問此網址頁面級 http://localhost:8080/[email protected]&password=prateek
它給了我正確的JSONObject我expecting- {「地位」:「成功」,「用戶類型」: 「developer」,「forwardUrl」:「Home.jsp」}
任何控制檯錯誤?您是否在調試工具的「網絡」選項卡中看到請求? – dave