我正在为我的研究项目开发一个Web Spring MVC 4应用程序,应用程序应该连接 web 和 android 客户端。
我使用@RestController
来帮助Android应用程序轻松通过json进行通信。我试图在网络或移动应用程序中捕获连接失败,例如 404 ,即使在Web应用程序中,我也试图通过Ajax与服务器进行几乎所有通信,希望让用户更轻松(进度条) ,实时信息提示...)但是,在使用jQuery的event.preventDefault()
之后的国家中的一个问题,我无法在下一个操作中克服它并且加载并保持看不见的响应页面!例如,这是我的登录页面示例:
login.js
jQuery(document).ready(function ($) {
$("#login-form").submit(function (event) {
//Do somthing...
// Call login function
logViaAjax(event);
// Prevent the form from submitting via the browser.
return false; //Or using event.preventDefault()
});
});
// logViaAjax function
function logViaAjax(event) {
var logObj = {};
logObj["username"] = $("#username").val();
logObj["password"] = $("#password").val();
//the response
$.ajax({
type: "POST",
contentType: "application/x-www-form-urlencoded; charset=UTF-8",
url: "/login",
data: logObj,
dataType: 'text',
timeout: 10000,
success: function (data) {
if (data.indexOf("login-box") !== -1) {
showLogFail();
}else{
window.location.reload();
//I dont need to reload the page because this gives me login page again... May be if there is a way to get the URL from data!?
}
},
error: function () {
showWarning();
}
});
我正在使用Spring Security 4
来处理身份验证,我们知道它提供了url ex:/login?fail
以便失败并获得请求的页面如果成功并且我最近知道它甚至在进入loginUrl之前重定向我的前/login
。我试图测试用户是否在服务器端登录并发送json响应,但这可能导致在请求登录之前丢失页面。
我想我应该在 success
: function()
进行测试,如果在jQuery中加载的url(但未显示)包含?fail
,则通知用户更改日志或密码。否则,如果没有,页面用户需要在后面付费,我需要的只是显示它。
经过那些小改动后,我需要做的只是让页面保持在登录页面之外并重新显示它。请注意,此功能由Spring Security自动提供,但仍在后台运行。在我的情况下,当用户点击/messenger
时,应用会将他重定向到/login
进行登录,如果登录失败,则会显示/login?fail
但是此页面由于JQuery而看不到,否则他会成功登录再次将他发送给/messenger
......
答案 0 :(得分:1)
试试这个
var flag;
jQuery(document).ready(function ($) {
$("#login-form").submit(function (event) {
//Do somthing...
// Call login function
logViaAjax(event);
if(flag.status == 404){
return false;
}
});
});
function logViaAjax(event) {
var logObj = {};
logObj["username"] = $("#username").val();
logObj["password"] = $("#password").val();
//the response
flag = $.ajax({
type: "POST",
contentType: "application/x-www-form-urlencoded; charset=UTF-8",
url: "/login",
data: logObj,
dataType: 'text',
timeout: 10000,
success: function (data) {
//Here to move to the page unseen if success and show error hint if it fail...
},
error: function () {
showWarning(); //Show error alerts, this part is DONE!
}
});
所做的更改
►将AJAX分配给变量并在jQuery(document).ready