ajax 毕竟是异步的 所以动态加载出来的数据 难免遇到 css 或者 js 失效的问题,所以要动态加载 css ji等文件了

1.公共方法 load

  //动态加载 js /css
function loadjscssfile(filename, filetype) {
if (filetype == "js") { //判定文件类型
var fileref = document.createElement('script')//创建标签
fileref.setAttribute("type", "text/javascript")//定义属性type的值为text/javascript
fileref.setAttribute("src", filename)//文件的地址
}
else if (filetype == "css") { //判定文件类型
var fileref = document.createElement("link")
fileref.setAttribute("rel", "stylesheet")
fileref.setAttribute("type", "text/css")
fileref.setAttribute("href", filename)
}
if (typeof fileref != "undefined")
document.getElementsByTagName("head")[0].appendChild(fileref)
}

2.  示例代码

 //初始化左侧 管理菜单
function InitLeftMenu() { var flag = false; //标识,表示页面上数据还未处理完成 $("#side-menu").empty();
var menulist = ' <li class="nav-header"><div class="dropdown profile-element">';
menulist += '<span><img alt="image" class="img-circle" src="/WebClient/static//BC.P.plus/img/profile_small.jpg" /></span>';
menulist += '<a data-toggle="dropdown" class="dropdown-toggle" href="#">';
menulist += '<span class="clear">';
menulist += '<span class="block m-t-xs"><strong class="font-bold">OCP-admin</strong></span>';
menulist += '<span class="text-muted text-xs block">管理员<b class="caret"></b></span>';
menulist += '</span>';
menulist += '</a>';
menulist += '</div>';
menulist += '<div class="logo-element"> QPTS </div>';
menulist += '</li>';
//同步获取
$.ajax({
type: 'GET',
url: '/Handler/MenuPermissionsASHX.ashx?Func=GetEasyUIMenuList',
async: false,//同步
dataType: 'json',
success: function (json) {
_menus = eval('(' + json.data + ')'); $.each(_menus.menus, function (i, n) {
menulist += "<li>";
menulist += '<a href="#"> <i class="fa fa fa-bar-chart-o"></i><span class="nav-label">' + n.menuname + '</span><span class="fa arrow"></span></a> ';
menulist += '<ul class="nav nav-second-level">';
$.each(n.menus, function (j, o) { menulist += '<li><a class="J_menuItem" href="' + o.url + '" title="' + o.menuname + '">' + o.menuname + '</a></li> '; })
menulist += '</ul>';
menulist += '</li>';
}) flag = true;
$("#side-menu").html(menulist); },
error: function (xhr, status, error) {
alert("操作失败"); //xhr.responseText
}
}); var loadFile; loadFile = setInterval(function() {//定时检测
if(flag) {//如果数据已经处理完毕
loadjscssfile('static/Bootstrap/css/bootstrap.min.css', "css"); //加载你的css文件
loadjscssfile('static/jQuery/jquery-2.1.1.js', "js"); //加载你的js文件
loadjscssfile('static/Bootstrap/js/bootstrap.min.js', "js"); //加载你的js文件
clearTimeout(t);//取消定时检测节省开销
}
},50); }

ajax加载数据后只加载一次JS:

有时候会出现一种情况,每次ajax都会加载一次js,因此需要在JS设置一全局变量用于标记是否已经加载使其只加载一次:

js设置一个全局变量,第一次调用ajax之后加载js;第二次调用js不再执行加载js。

/**
* qlq写的 根据题库生成试卷的JS
*/
// 页面加载后执行的函数
var isLoad = false;// 记录是否已经加载
$(function() {
// alert($("select[name='exampaper.level'] option:selected").val())
searchQuestions(); /**
* 题库试题的提交按钮的点击事件
*/
$("#queryBankByn").click(function() {
searchQuestions();
}); });
// 查询试题
var searchQuestions = function() {
$
.ajax({
url : contextPath + '/createPaper_bankGenePaper.action',
data : {
'level' : $(
"select[name='exampaper.level'] option:selected")
.val(),
'type' : $("select[name='type'] option:selected").val(),
'knowledgeType' : $(
"select[name='knowledgeType'] option:selected")
.val(),
'questionBankId' : $(
"select[name='questionBankId'] option:selected")
.val(),
},
async : true,
dataType : 'json',
type : 'POST',
success : showQuestions,
error : function() {
alert("ajax查询试题失败!")
}
});
}
// 显示到右边题库试题栏
var showQuestions = function(questions) {
$("#bankQuestions").html("");// 清空题
for (var i = 0, length = questions.length; i < length; i++) {
// 拼接单选题
if (questions[i].type == '单选题') {
var danxuan = "<li class='list-group-item el_drag' style='height: 30px;'><input type='checkbox' class='el_tiku_checkedButton'> <input type='hidden'"
+ "id='"
+ i
+ "' class='ques_id'> <!--放 id -->"
+ "<!--单选题 class = 'dan'--><div class='movie_box dan'><div class='tm_btitlt'>"
+ questions[i].question + "</div><ul class='wjdc_list'>";
// 拼接单选题选项
for (var j = 0, options_length = questions[i].options.length; j < options_length; j++) {
danxuan += "<li><label> <input type='radio' value=''><span>"
+ questions[i].options[j].optioncontent
+ "</span></label></li>";
}
danxuan += '</ul>'
+ '答案: <input type="hidden" class="ques_answer" value="'
+ questions[i].answer + '">' + questions[i].answer
+ '<br />'
+ '解析:<input type="hidden" class="ques_analy" value="'
+ questions[i].analysis + '">' + questions[i].analysis
+ '</div> <span class="el_unflod"> &or;</span></li>';
$("#bankQuestions").append(danxuan);
}
// 拼接多选题
if (questions[i].type == '多选题') {
var duoxuan = "<li class='list-group-item el_drag' style='height: 30px;'><input type='checkbox' class='el_tiku_checkedButton'> <input type='hidden'"
+ "id='"
+ i
+ "' class='ques_id'> <!--放 id -->"
+ "<!--单选题 class = 'dan'--><div class='movie_box duo'><div class='tm_btitlt'>"
+ questions[i].question + "</div><ul class='wjdc_list'>";
// 拼接多选题选项
for (var j = 0, options_length = questions[i].options.length; j < options_length; j++) {
duoxuan += "<li><label> <input type='checkbox' value=''><span>"
+ questions[i].options[j].optioncontent
+ "</span></label></li>";
}
duoxuan += '</ul>'
+ '答案: <input type="hidden" class="ques_answer" value="'
+ questions[i].answer + '">' + questions[i].answer
+ '<br />'
+ '解析:<input type="hidden" class="ques_analy" value="'
+ questions[i].analysis + '">' + questions[i].analysis
+ '</div> <span class="el_unflod"> &or;</span></li>';
$("#bankQuestions").append(duoxuan);
}
// 拼接判断题
if (questions[i].type == '判断题') {
var panduan = "<li class='list-group-item el_drag' style='height: 30px;'><input type='checkbox' class='el_tiku_checkedButton'> "
+ "<input type='hidden' id='"
+ i
+ "' class='ques_id'> <!--放 id -->"
+ "<!--单选题 class = 'dan'--><div class='movie_box pan'><div class='tm_btitlt'>"
+ questions[i].question + "</div><ul class='wjdc_list'>";
// 拼接判断题选项
for (var j = 0, options_length = questions[i].options.length; j < options_length; j++) {
panduan += "<li><label> <input type='radio' value=''><span>"
+ questions[i].options[j].optioncontent
+ "</span></label></li>";
}
panduan += '</ul>'
+ '答案: <input type="hidden" class="ques_answer" value="'
+ questions[i].answer + '">' + questions[i].answer
+ '<br />'
+ '解析:<input type="hidden" class="ques_analy" value="'
+ questions[i].analysis + '">' + questions[i].analysis
+ '</div> <span class="el_unflod"> &or;</span></li>';
$("#bankQuestions").append(panduan); }
} loadjscssfile('js/examParper/addExamparper/tiku.js', "js"); // 动态加载从题库添加试题js
if (!isLoad) {
loadjscssfile('js/examParper/addExamparper/index3question.js', "js"); //
isLoad = true;
}
// 动态加载从js
} /**
* 动态加载 js /css函数 第一个参数代表url,第二个参数代表类型
*/
function loadjscssfile(filename, filetype) {
if (filetype == "js") { // 判定文件类型
var fileref = document.createElement('script')// 创建标签
fileref.setAttribute("type", "text/javascript")// 定义属性type的值为text/javascript
fileref.setAttribute("src", filename)// 文件的地址
} else if (filetype == "css") { // 判定文件类型
var fileref = document.createElement("link")
fileref.setAttribute("rel", "stylesheet")
fileref.setAttribute("type", "text/css")
fileref.setAttribute("href", filename)
}
if (typeof fileref != "undefined")
document.getElementsByTagName("head")[0].appendChild(fileref)
}

补充:

  关于动态引入JS还有好几种方法,上面是采用createElement的方法创建元素之后appendChild()添加元素。比如常用的   document.write("<script src....></script>")   或者   采用jQuery改变script标签的src属性,再有可以用jQuery的append()方法向页面指定的元素中添加script标签。

  但是需要注意的是引入JS的相互依赖关系,有时候我们引入的JS调用了其他JS的东西,所以我们需要注意动态引入JS的时机。

  如果JS是独立的JS,我们可以写个一次性自调函数引入相关JS。

    如果动态引入的JS中依赖其他JS,我们需要在页面加载完成后引入相关JS,但是需要注意使用window.onload引入。window.onload执行比jQuery慢,所以会在jQuery执行完才动态引入JS。

js与jQuery加载区别:

第二种解决办法:利用jQuery的事件委托机制:

参考:http://www.cnblogs.com/qlqwjy/p/7767828.html

关于 ajax 动态返回数据 css 以及 js 失效问题(动态引入JS)的更多相关文章

  1. 关于 ajax 动态返回数据 css 以及 js 失效问题

    ajax 毕竟是异步的 所以动态加载出来的数据 难免遇到 css 或者 js 失效的问题,所以要动态加载 css ji等文件了 1.公共方法 load //动态加载 js /css function ...

  2. ajax请求返回数据,模板中的数据处理

    /*ajax请求返回数据,模板中的数据处理*/ function QueryGameAsset(){ var new_start_time=$('#new_start_time').val();//开 ...

  3. $.ajax请求返回数据中status为200,回调的却是error?

    $.ajax({ type:'get',//使用get方法访问后台 dataType:'json',//访问json格式的数据 url:'http://job.hainan.net/api/recru ...

  4. ajax正确返回数据,却进入了error分支

    .net 开发: $.ajax({ type: "POST", //post没有数据量限制 url: "ashx/PostHandle.ashx", data: ...

  5. JS-利用ajax获取json数据,并传入页面生成动态tab

    封装好的:ajax.js function ajax(url, fnSucc,fnFaild){ //1[创建] if(window.XMLHttpRequest){ var oAjax = new ...

  6. Ajax中返回数据的格式

    Ajax中常见的返回数据的格式有三种:分别为文本,XML和JSON 返回的文本格式我们在上一堂课Ajax基础介绍中已经介绍过了 Ajax.php Form.html:通过Ajax对象的response ...

  7. 关于IE浏览器 ajax 请求返回数据不对的问题

    在使用ajax向后台发送请求的时候,在使用ie 进行调试的时候发现根据条件进行查询时,返回的数据与没有根据条件进行查询时数据相同,也就是条件没有发生作用. 经过同事的帮助发现ajax初始化设置时没有c ...

  8. jquery中获取ajax请求返回数据的方法

    function getPageTotalAndDataTotal(page) { //设置一个变量用于接收ajax返回的值 var pageTotal = 0; // 获取页数与数据总数 $.aja ...

  9. Angular js 之动态传数据到下一个页面和动态通过ng-click进入不同的页面

    +关于Angular js中一些千篇一律的后台获取数据 首先在services.js里面把服务写好 然后在controller里面把数据给打印出来 (首先需要把数据注入) +关于Angular js中 ...

随机推荐

  1. java String中的replace(oldChar,newChar) replace(CharSequence target,CharSequence replacement) replaceAll replaceFirst 面试题:输入英文语句,单词首字符大写后输出 char String int 相互转换

    package com.swift; import java.util.Scanner; public class FirstChat_ToCaps_Test { public static void ...

  2. SAP HANA

    DROP PROCEDURE ""."ZCONCAT_EKKO_EBN"; CREATE PROCEDURE ""."ZCONCA ...

  3. pandas中层次化索引与切片

    Pandas层次化索引 1. 创建多层索引 隐式索引: 常见的方式是给dataframe构造函数的index参数传递两个或是多个数组 Series也可以创建多层索引 Series多层索引 B =Ser ...

  4. python中的sort、sorted排序

    我们通常会遇到对数据库中的数据进行排序的问题,今天学习一下对列表和字典的排序方法. 列表 第一种:内建方法sort sort()对列表排序是永久性的排序. 用法:sort(*, key=None, r ...

  5. java实现验证码功能

    java实现验证码功能 通过java代码实现验证码功能的一般思路: 一.通过java代码生成一张验证码的图片,将验证码的图片保存到项目中的指定文件中去,代码如下: package com.util; ...

  6. (转)JVM各种内存溢出是否产生dump

    对于java的内存溢出,如果配置-XX:+HeapDumpOnOutOfMemoryError,很明确的知道堆内存溢出时会生成dump文件.但永久代内存溢出不明确是否会生成,今天来做一个实验: 永久代 ...

  7. Linux网络编程:客户端/服务器的简单实现

    一. Socket的基本知识 1. socket功能 Socket层次 Socket实质上提供了进程通信的端点,进程通信之前,双方必须首先各自创建一个端点,否则是没有办法建立联系并相互通信的. 每一个 ...

  8. js实现获取当前时间是本月第几周的方法

    这篇文章主要介绍了js实现获取当前时间是本月第几周的方法,涉及javascript针对日期及时间的相关操作技巧,非常简单实用,需要的朋友可以参考下. 本文实例讲述了js实现获取当前时间是本月第几周的方 ...

  9. body标签相关

    03-body标签中相关标签   今日主要内容: 列表标签 <ul>.<ol>.<dl> 表格标签 <table> 表单标签 <fom> 一 ...

  10. mysql update连表

    UPDATE price_air_item t1 LEFT JOIN order_item t2 ON t1.ORDER_ITEM_ID = t2.ORDER_ITEM_ID SET t1.BUYER ...