Ajax动态加载JavaScript文件 .

 

Ajax动态加载JavaScript文件

分类: Ext Ajax 594人阅读 评论(0) 收藏 举报

      开发应用程序时,经常需要实现模块的按需加载:当用户点击该模块或使用模块功能前才进行加载。采用模块按需加载可以大幅度节省系统资源,对于富客户端尤甚。在用启用该模块功能时,通过Ajax请求相应的JavaScript文件,然后执行该文件进行模块的加载。这里要使用JavaScript的全局函数eval,下面对其进行介绍

  1. eval( code )  

参数

code: 字符串,含有要计算的JavaScript表达式或要执行的语句

返回值

计算code得到的值,如果存在的话

异常

SyntaxError: 说明code中没有合法的JavaScript表达式或语句

      EvalError:说明非法调用eval()

      其他异常:如果传给eval()的JavaScript代码抛出了一个异常,eval()将把这个异常传递给调用者

描述

      eval()是全局方法,他将执行一个包含JavaScript代码的字符串。如果code含有一个表达式,eval()将计算这个表达式,并返回它的值。如果code含有一个或多个JavaScript语句,eval()将执行这些语句,如果最后一个语句有返回值,他还会返回这个是。如果code没有返回值eval()返回undefined。

 

      因此可以在eval()中实现对象的实例化或函数的声明,完成模块的动态加载。下面例子是使用Ext类库,完成在一个panel中动态加载另一个panel这样的功能。

 

index.jsp

  1. <%--   
  2.     Document   : index  
  3.     Created on : 2010-6-17, 12:58:14  
  4.     Author     : Administrator  
  5. --%>  
  6. <%@page contentType="text/html" pageEncoding="UTF-8"%>  
  7. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"  
  8.     "http://www.w3.org/TR/html4/loose.dtd">  
  9. <html>  
  10.     <head>  
  11.         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
  12.         <title>JSP Page</title>  
  13.         <link rel="stylesheet" type="text/css" href="ext/resources/css/ext-all.css" mce_href="ext/resources/css/ext-all.css" />  
  14.         <mce:script type="text/javascript" src="ext/ext-base-debug.js" mce_src="ext/ext-base-debug.js"></mce:script>  
  15.         <mce:script type="text/javascript" src="ext/ext-all-debug.js" mce_src="ext/ext-all-debug.js"></mce:script>  
  16.     </head>  
  17.     <body>  
  18.         <div id="layout"></div>  
  19.         <mce:script type="text/javascript"><!--  
  20.             Ext.ns("App");  
  21.             App.panel=new Ext.Panel({  
  22.                 title: "ajax动态加载js文件",  
  23.                 id: "view",  
  24.                 width: 400,  
  25.                 height: 200,  
  26.                 renderTo: "layout",  
  27.                 layout: "border",  
  28.                 items: [{  
  29.                         id: "east",  
  30.                         region: "center",  
  31.                         title: "center",  
  32.                         html: "中心面板",  
  33.                         bbar: [{  
  34.                                 xtype: "button",  
  35.                                 text: "click",  
  36.                                 handler: function(){  
  37.                                     Ext.Ajax.request({  
  38.                                         url: 'loaded.js',//请求js文件  
  39.                                         //response服务器端相应  
  40.                                         success: function(response, opts) {  
  41.                                             var o = eval(response.responseText);//动态执行js文件,o为返回值  
  42.                                             if(o){  
  43.                                                 App.loadedPanel.generate();//loaded.js文件中的代码已经执行,创建了App.loadedPanel对象  
  44.                                                 Ext.getCmp("view").doLayout();//让父容器重新布局  
  45.                                             }  
  46.                                         },  
  47.                                         failure: function() {  
  48.                                             Ext.Msg.alert("错误","加载模块失败!");  
  49.                                         },  
  50.                                         scope: this  
  51.                                     });  
  52.                                 }  
  53.                             }]  
  54.                     }]  
  55.             });  
  56.           
  57. // --></mce:script>  
  58.     </body>  
  59. </html>  
 

 

loaded.js 用于被动态加载的js文件,这个文件在客户端向服务器端请求完成后被运行,相应的panel对象被实例化,完成模块加载功能

  1. App.loadedPanel=new Ext.Panel({  
  2.     title: "ajax动态加载js文件",  
  3.     html: "使用ajax动态请求服务器端js文件并执行加载",  
  4.     frame: true,  
  5.     generate: function(){  
  6.         var p=Ext.getCmp("east");  
  7.         p.body.dom.innerHTML="";  
  8.         p.add(this);  
  9.     }  
  10. });  
 

 

效果图:

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要想实现动态添加数据到JSON文件,需要以下几个步骤: 1. 前端使用Vue和Ajax技术,将需要添加的数据通过POST请求发送到后端。例如: ```javascript axios.post('/addData', { name: '张三', age: 20, gender: '男' }).then(response => { console.log(response.data); }).catch(error => { console.log(error); }); ``` 2. 后端使用Node.js和Express框架接收前端发送的POST请求,并将数据添加到JSON文件。例如: ```javascript const fs = require('fs'); const express = require('express'); const bodyParser = require('body-parser'); const app = express(); app.use(bodyParser.json()); app.post('/addData', (req, res) => { const newData = req.body; const dataFile = './data.json'; let data = []; fs.readFile(dataFile, 'utf8', (err, content) => { if (err) { console.error(err); res.status(500).send('服务器错误:读取数据文件失败!'); } else { try { data = JSON.parse(content); } catch (e) { console.error(e); res.status(500).send('服务器错误:解析数据文件失败!'); } data.push(newData); fs.writeFile(dataFile, JSON.stringify(data), err => { if (err) { console.error(err); res.status(500).send('服务器错误:写入数据文件失败!'); } else { res.send('添加数据成功!'); } }); } }); }); app.listen(3000, () => { console.log('服务器已启动,监听端口3000...'); }); ``` 在上述代码,我们首先使用`body-parser`间件来解析请求体JSON数据,然后读取JSON文件的数据,将新数据添加到数据数组,最后将修改后的数据数组写回JSON文件。 注意,以上代码只是一个简单的示例,实际场景需要添加更多的错误处理和安全措施,例如检查请求体的数据是否合法、限制JSON文件的大小、防止文件读写冲突等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值