1.Js和页面只加载一次,放在同一个容器中

1.1 请求的控制

    Jquery的ajax方法中,属性async用于控制请求是同步还是异步,默认是true,即ajax请求默认是异步请求。但有时需要在数据请求完成时才进行下一步操作,这时需要对async进行动态控制。

   $.ajaxSettings.async = false;
    …进行请求…
   $.ajaxSettings.async = true;

1.2 动态加载js

    可通过判断当前容器中的某个js方法是否已有,没有的话进行加载。

if(typeof myJsMethod != 'undefined' && myJsMethod instanceof Function){

       $.ajaxSettings.async = false;

       $.getScript("js/my.js");

       $.ajaxSettings.async = true;

}

​​1.3 动态加载html

    可通过判断当前容器中的某个标签的ID(全局唯一)是否已有,没有的话进行加载。

if(!$("#myDiv").length > 0){

        $.ajaxSettings.async = false;

        $.post("loadMyDivHtml",function(result){

              $("#myDiv").html(result);//页面拼接

              $.parser.parse($("#myDiv"));//页面渲染,这样样式之类的才能生效

        });

        $.ajaxSettings.async = true;

}

2.Js和页面加载多次,部分在同一个容器中

本例在SpringBoot、thymeleaf情况下进行说明。每次需要用到时再重新加载一次。

2.1 定义公共CSS的引用

定义公共的CSS文件引用,命名为CommonCSS.html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<!--公用的CSS-->
<!--<head th:fragment="commonCSS">-->

<div th:fragment="commonCSS">
    <link rel="stylesheet" type="text/css" th:href="@{{path}/css/style.css(path=${contextPath})}"/>
    <link rel="stylesheet" type="text/css" th:href="@{{path}/css/themes/default/easyui.css(path=${contextPath})}"/>
    <link rel="stylesheet" type="text/css" th:href="@{{path}/css/themes/icon.css(path=${contextPath})}"/>

    <link rel="stylesheet" type="text/css" th:href="@{{path}/layui/css/layui.css(path=${contextPath})}"/>

    <!--定义Web访问上下文,用于JS等请求的前缀部分-->
   
<meta name="ctx" th:content="${#httpServletRequest.getContextPath()}" />
</div>
<!--</head>-->
</html>

 

2.2 定义公共JS的引用

定义公共的JS文件引用,命名为CommonJS.html

<!DOCTYPE html>

<html xmlns:th="http://www.thymeleaf.org">

<!--公用的JS-->

<div th:fragment="common_js">

    <script type="text/javascript" th:src="@{{path}/js/libs/jquery.min.js(path=${contextPath})}"/>

    <script type="text/javascript" th:src="@{{path}/js/libs/jquery.easyui.min.js(path=${contextPath})}"/>

    <script type="text/javascript" th:src="@{{path}/layui/layui.js(path=${contextPath})}"></script>

    <script type="text/javascript">

        // 公共的上下文

        var ctx_path = $("meta[name='ctx']").attr("content");

    </script>

    <script type="text/javascript" th:src="@{{path}/js/utils.js(path=${contextPath})}"></script>

</div>

</html>

​​​​​​​​​​​​​​2.3 在各个html中引入

在Head标签引入公共的CSS和JS.

<!DOCTYPE html>

<html xmlns:th="http://www.thymeleaf.org">

<head>

    <div th:replace="common/commonCSS::commonCSS"></div>

    <div th:replace="common/commonJS::common_js"></div>

    <!--自身的js-->

    <script type="text/javascript" th:src="@{{path}/js/my.js(path=${contextPath})}"/>

</head>

​​​​​​​​​​​​​​2.4 在自定义中使用Web上下文

$.get(ctx_path+'/getNumbers', function (result) {

      alert(result);
​
});
​

注:仅供个人参考!

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐