IE edge浏览器ajax post提交不带参数问题

发布于 2022-09-11 18:55:24 字数 5328 浏览 22 评论 0

1、在Google浏览下可以正常访问,但IE edge下第一次点击登入时,参数没有传(所以的接口都会偶然的出现该问题,在开发者模式下必现)。

2、主要代码(jquery用的是1.8.3)
js:点击事件

$("#dologin").on("click", function () {
    var username = $("#usrname").val(),
        param = {};
    if (!username) {
        dialog({
            quickClose: true,
            content: '请输入K账号',
            onclose: function () {
                $("#usrname").focus();
            },
            follow: $("#usrname")[0]
        }).show();
        return;
    }
    if($("#password").length>0 && !$("#password").val()){
        dialog({
            quickClose: true,
            content: '请输入密码',
            onclose: function () {
                $("#password").focus();
            },
            follow: $("#password")[0]
        }).show();
        return;
    }else if($("#password").length>0 && $("#password").val()){
        param["password"] = $("#password").val();
    }
    param["username"] = $("#usrname").val();
    Global.postData({
        url: "/az/main/doLogin.do",
        params: param,
        success: function (data) {
            var info = data.obj;
            var userInfo = {
                prId: info.prId,
                roleType: info.sheRoleId,
                chineseName: info.chineseName || "",
                firstName: info.firstName || "",
                lastName: info.lastName || "",
                userId: info.userId,
                loginTime: new Date().Format("yyyy-MM-dd hh:mm:ss")
            };
            W.localStorage.setItem("userInfo", JSON.stringify(userInfo));
            window.location.href = 'main.do';
            return false;
        }
    });
});

Global.postData方法:

    /**
     * ajax请求
     * @param {Object} config:
     *          {String} url:请求路径
     *          {Json} params:提交参数
     * @param {String} type:P(默认)-mainMBd加loading图标;M-mainM加loading图标,NO-没有loading,F-满屏,D-dialog页面
     * @callback {function} success:返回true时的回调函数
     *                        {Json} data:请求返回的参数
     * @callback {function} errorFnc:返回false时的回调函数
     *                        {Json} data:请求返回的参数
     */
    postData: function (config, type) {//ajax方法
        config = config || {}, type = type || "F";
        var url = config.url || '', params = config.params || {},
            async = config.async === false ? false : true,
            _t = this;
        if (!url) {
            console.log("无请求地址!");
            return;
        }
        console.info(config.params);
        $.ajax({
            type: 'POST',
            url: url + "?time="+new Date().getTime(),
            // stringify
            dataType: 'json',
            data: params,
            async: async,
            cache:false,
            beforeSend: function (xhr) {
                if(type=='F'){
                    _t.addFullLoading();
                }
            },
            success: function (data) {
                if (config.formatterData) {
                    data = config.formatterData.call(this, data);
                }
                if(type=='F'){
                    _t.delFullLoading();
                }
                if ((data instanceof Array) || (JSON.stringify(data) == "{}")) {
                    data = {
                        success: true,
                        msg: MsgEnum.SUCCESS.getMsg(),
                        rows: data
                    }
                } else if (data == undefined || data == null) {
                    data = {
                        success: false,
                        msg: "操作错误"
                    }
                }
                var flag = true;
                if (data.success) {
                    if (config.success) {
                        flag = config.success.call(this, data);
                    }
                    if(flag === false){
                        return ;
                    }
                    dialog({
                        title:"成功",
                        width:200,
                        height:50,
                        content:data.msg,
                        cancelValue:"确认",
                        cancel:true
                    }).showModal();
                } else {
                    if (config.errorFnc) {
                        flag = config.errorFnc.call(this, data);
                    }
                    if(flag === false){
                        return ;
                    }
                    dialog({
                        title:"错误",
                        width:200,
                        height:50,
                        content:data.msg || '操作失败!',
                        cancelValue:"确认",
                        cancel:true
                    }).showModal();
                }
            }
        });
    }
    

3、问题截图

首先在点击事件中发现,在ajax请求的时候都已经传入参数的了,如下图

clipboard.png

然后后端并没有接收到,后来发现网络中对应的接口的确没有传递参数,如下图。但是如上图的确在ajax请求时参数并不为空。

clipboard.png

4、如果是jQuery有问题,或者我ajax用错的话,那所有浏览器都会有问题,但只有IE-edge浏览器有这个问题,且第二次点击就能够正常。

由于自己对ie兼容问题掌握不够到位,所以没有一点解决思路。故劳烦广大道友帮忙给一点方法或者思路都可、或者这个可能会由那些问题引起都可以告诉我,我会自己验证的。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文