尝试使用JQuery

时间:2016-04-12 09:52:18

标签: javascript jquery ajax spring-mvc spring-security

我正在为我的研究项目开发一个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 ......

1 个答案:

答案 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

中添加条件

<强> AJAX - The onreadystatechange Event

<强> Demo Fiddle to show 404 error