欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

同个页面使用多个版本的JQuery不产生冲突解决方案

程序员文章站 2022-03-07 12:43:48
同个页面使用多个版本的JQuery不产生冲突解决方案产生问题的原因:前端使用LigerUI框架时用到了Grid(数据表格)组件,表格内展示的数据都是车辆信息。现有需求就是每台车都要上传其相关的车辆照片或者档案文件,因此我们就需要一个上传文件的功能,我使用的方式是异步上传。产生问题的场景:于是我就按照以往的方式使用$.ajax(…);来上传文件了,等一切都编写完成后我迫不及待的进行了测试,可结果跟预期完全不一样甚至控制台还出现了报错信息(TypeError: M.data.match is n...

同个页面使用多个版本的JQuery不产生冲突解决方案


产生问题的原因:

前端使用LigerUI框架时用到了Grid(数据表格)组件,表格内展示的数据都是车辆信息。现有需求就是每台车都要上传其相关的车辆照片或者档案文件,因此我们就需要一个上传文件的功能,我使用的方式是异步上传。

产生问题的场景:

于是我就按照以往的方式使用$.ajax(…);来上传文件了,等一切都编写完成后我迫不及待的进行了测试,可结果跟预期完全不一样甚至控制台还出现了报错信息(TypeError: M.data.match is not a function),说实话一时间我还真搞不明白是为什么,在网上搜了半天也试过很多种方法也都无济于事。但不知怎么的我就突然想到会不会是JQuery版本的问题(此时我用的JQuery版本是1.3.2),于是我就换了1.8.3的版本,果不其然还就是因为原先用的那个JQuery版本太低了才导致出现这个错。现在上传文件的问题是解决了但又衍生出了新的问题,就是表格突然显示不出数据了而且控制台也无任何异常信息(不知道是因为LigerUI的依赖问题还是其他的什么原因,总之我用高一点版本的JQuery就会导致这个框架产生很多问题),这下就让我很头疼了,想到的解决方案就是JQuery让渡了。也就是只让上传文件那个功能使用JQuery1.8.3的版本,其他的还都是用1.3.2。

代码示例:

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/1.8.3/jquery.min.js" type="text/javascript"></script>
    <script>
        var $2 = $.noConflict(true);
    </script>
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/1.3.2/jquery.min.js" type="text/javascript"></script>
    <!-- 其他脚本或样式的引入,略...... -->
    <script>
        $(function () {
            alert($.fn.jquery); // 1.3.2
            alert($2.fn.jquery); // 1.8.3
            
            // 此时就已经完成让渡了,$代表JQuery1.3.2,$2代表JQuery1.8.3
            
            // 数据表格初始化,略......
            
            // 上传文件关键代码
            $('#fileInput').change(function () {
                try {
                    var formData = new FormData();
                    formData.append('file', $("#fileInput")[0].files[0]);
                    formData.append('uploader', 'System Administrator.');
                    formData.append('vehicleId', '<%=vId%>');
                    
                    // 注意到这里使用的就是$2了
                    $2.ajax({
                        url: '......自己的接口?type=UploadFile',
                        type: "POST",
                        data: formData,
                        async: false,
                        cache: false,
                        contentType: false,
                        processData: false,
                        dataType: 'json',
                        success: function (res) {
                            if (res.code == 0) {
                                loadgrid.reload();
                                f_alert2('success', '【' + res.data.title + '】上传成功');
                            }
                        },
                        error: function () {
                            f_alert2('error', '上传失败');
                        },
                        complete: function () {
                            $('#fileInput').val('');
                        }
                    });
                } catch (e) {
                    f_alert2('error', '系统繁忙,请稍后再试');
                }
            });
            
            // 其他代码,略......
        });
    </script>
</head>
<body>
    <!-- 页面元素,略...... -->
</body>
</html>

踩坑记录:

// input标签的type值为file时,change事件要写在页面加载完成后,否则将无法触发。
// 如果是异步上传文件,最好是每次都将该标签的value清空一下,否则可能会出现除第一次外后面几次都不会触发。
$(function() { 
    $('#inputFile').change(function() { 
        ......
    }); 
});

本文地址:https://blog.csdn.net/weixin_44854779/article/details/109580009