避免使用jquery ajax在url中显示值

时间:2014-02-21 20:31:46

标签: javascript jquery ajax json spring-security

我正在使用spring security进行ajax调用登录,但无论如何都会在url中显示用户名和密码。

ex:/?j_username=s&j_password=s

我试图找到我的错误很长一段时间,但我无法看到它。这可能是一个小错误。

这是我的ajax电话;

    function performLogin() {
        var j_username = $("#j_username").val();
        var j_password = $("#j_password").val();

        $.ajax({
            cache: false,
            type: 'POST',
            url: "/login",
            crossDomain: true,
            async: false,
            data: { 'j_username': j_username, 'j_password': j_password},
            dataType: 'json',
            beforeSend: function (xhr) {
                xhr.setRequestHeader("x-ajax-call", "no-cache");
            }
        });
    }


Thanks

EDIT: 

It is resolved by adding `return false;` 

But I am not sure if my approach is good. Here is the update;

'function performLogin() {

    var j_username = $("#j_username").val();
    var j_password = $("#j_password").val();

    $.ajax({
        cache: false,
        type: 'POST',
        url: "/Mojoping2/login",
        crossDomain: true,
        async: false,
        data: { 'j_username': j_username, 'j_password': j_password},
        dataType: 'json',
        beforeSend: function (xhr) {
            xhr.setRequestHeader("x-ajax-call", "no-cache");
        },
        success: window.location.reload()

    });

    return false;
}

2 个答案:

答案 0 :(得分:1)

它与Ajax调用无关。您没有取消表单提交!

function performLogin() {
    var j_username = $("#j_username").val();
    var j_password = $("#j_password").val();

    $.ajax({
        cache: false,
        type: 'POST',
        url: "/login",
        crossDomain: true,
        async: false,
        data: { 'j_username': j_username, 'j_password': j_password},
        dataType: 'json',
        beforeSend: function (xhr) {
            xhr.setRequestHeader("x-ajax-call", "no-cache");
        }
    });

    return false;
}

然而你要添加事件

onsubmit="return performLogin();

如果您使用jQuery附加事件,则可以使用

function performLogin(evt) {
    evt.preventDefault();
    ...

答案 1 :(得分:0)

我创建了一个jsfiddle来测试你的代码并且无法复制你的bug。 POST请求似乎正常提交(通过chrome dev工具),并且没有出现额外的GET值。

演示:http://jsfiddle.net/5EXWT/1/

出于兴趣,您使用的是哪个版本的jQuery?

 {this is just here so i can submit the jsfiddle}