html json加密 ajax请求问题

问题背景

在SSM项目中,html页面需要将用户登录信息加密后传至后台进行验证。传输格式为一个加密过的json串,其中包括所要用的用户名、密码等信息。

var json = {
                "userName":userName,
                "passWord":enPassWord,
                "identifyingCode":secureCode
            }

传输时需要将该json串进行加密并传输,下面是加密和解密过程

//加密
var cipherText = AESEnc(aesKey, json);
//解密
var plainText = AESDec(aesKey, cipherText);

在加密后便用ajax进行请求

$.ajax({
                type: 'POST',
                url: 'http://localhost:8080/login',
                data: {
                    requestData: cipherText,
                    encryptKey: encryptKey
                },
                dataType: 'json',
                success: function (data) {

                    console.log(data);

                    if (data.msg=="成功") {
                        console.log("in")
                        changeCaptcha();
                        window.location.href="http://localhost:8080/index";
                    } else {
                        $("#warn").removeAttr("hidden");
                        $("#warn").text(data.msg);
                        changeCaptcha();
                    }
                }
            });

问题详情

问题出现在发送请求时,ajax完全不起作用,并且每次点击登陆之后会直接刷新页面
在调试过程中看到了一个一闪而过的错误

Cannot read property 'words' of undefined

解决方法及原理

当一个json格式的对象被加密之后,得到的是一个对象,而使用ajax是引入了jQuery,这时传入的对象就会变成query string,从而引发错误。
解决方法就是把json拼接成一个字符串后再加密

var json = '{"userName": "'+userName+'","passWord": "'+enPassWord+'","identifyingCode": "'+secureCode+'"}';

这样就可以顺利进行流程。

你可能感兴趣的:(html json加密 ajax请求问题)