`
holdbelief
  • 浏览: 707568 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用Ajax从服务器段动态生成JavaScript代码

阅读更多

    参考《深入浅出Ajax》一书,并且阅读了一位高人的《深入认识javascript中的eval函数》 一文,有很多启发,于是我写了一个使用Ajax从服务器段动态生成JavaScript代码的例子,并且使用了eval函数,我是初学者,写此文的目的其实是想让大家给我的代码多提建议,谢谢!!
index.jsp
<%@ page language="java" contentType="text/html; charset=GBK" pageEncoding="GBK"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
<script language="JavaScript" type="text/javascript">
<!--
    var xmlHttp;
    function createXMLHttpRequest()
    {
        if(window.ActiveXObject)
        {
            xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
        else if(window.XMLHttpRequest)
        {
            xmlHttp = new XMLHttpRequest();
        }
    }
   
    function choose()
    {
        xmlHttp.open("GET",
                     "ProcessServlet?choose="+document.getElementById("choosejsfile").value,
                     true);//这个open方式是使XMLHttpRequest提交到一个Servlet
        //xmlHttp.open("GET",
       "ajaxstudy/secondgeneratejs.jsp?choose="+document.getElementById("choosejsfile").value,
        true);//这个是使XMLHttpRequest提交到一个jsp
        //其实以上两种提交方式没什么本质区别。
        xmlHttp.onreadystatechange = processRequest;//processRequest回调函数
        xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
        xmlHttp.send(null);
    }
   
    function processRequest()
    {
        if(xmlHttp.readyState == 4)
        {
            if(xmlHttp.status == 200)//信息已经成功返回
            {
                alert(xmlHttp.responseText);
               
                invoke(xmlHttp.responseText);
            }
            else
            {
                alert("您请求的页面有异常");
            }
        }
        else
        {
            //信息还没有返回,请等待
        }
    }
   
    //下面的代码是用来动态执行由服务器段传回来的字符串
    //"var fun = function(){alert( '执行第一段代码,我是由服务器端的Servlet传来的');return '执 
    //行第一段代码';}"
    //不能直接使用eval函数是因为eval只能声明局部的变量。需要使用如下方式。
    //在《深入认识javascript中的eval函数》一文中讲的非常详细。
    var X2 = {}
    X2.Eval = function(code)
    {
        if(window.attachEvent && !window.opera)
        {
            //ie
            window.execScript(code);
        }
        else
        {
            //not ie
            window.eval(code);
        }
    }

    function invoke(code)
    {
        X2.Eval(code);
    }
//-->
</script>
<title>Insert title here</title>
</head>
<body onload="createXMLHttpRequest()">
    <select id="choosejsfile">
        <option value="1">第一段代码</option>
        <option value="2">第二段代码</option>
        <option value="3">第三段代码</option>
    </select>
    <input type="button" onclick="choose()" value="提交">
    <input type="button" onclick="fun()" value="测试">
    <!--
         注意fun并没有声明,它是在服务器段以字符串的形式传过来的,eval执行这个字符串,
         动态声明了一个函数fun。我下面把服务器段的代码贴上。
    -->
</body>
</html>

服务器段代码:
xmlHttp.open("GET",
             "ProcessServlet?choose="+document.getElementById("choosejsfile").value,
             true);//这个open方式是使XMLHttpRequest提交到一个Servlet
假设open方法指定提交到一个Servlet,名字叫ProcessServlet,我现在把这个Servlet的代码贴出来,
如果是提交到一个jsp,代码相同,提交到哪里不是关键。
ProcessServlet.java(只贴doGet方法了)
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException

    {
        request.setCharacterEncoding("GBK");
        response.setCharacterEncoding("GBK");
       
        String choose = request.getParameter("choose");
        StringBuffer sb = new StringBuffer();
       
        if(choose != null && !choose.equals(""))
        {
            if(choose.equals("1")) //下拉菜单选择“第一段代码”
            {
                System.out.println("返回第一段代码");
                response.addHeader("Content-Type","text/html");
                sb.append("var fun = function(){alert( '执行第一段代码,我是由服务器端的Servlet传来的');return '执行第一段代码';}");
            }
            else if(choose.equals("2")) //下拉菜单选择“第二段代码”
            {
                System.out.println("返回第二段代码");
                response.addHeader("Content-Type","text/html");
                sb.append("var fun = function(){alert( '执行第一段代码,我是由服务器端的Servlet传来的');return '执行第一段代码';}");
            }
            else if(choose.equals("3")) //下拉菜单选择“第三段代码”
            {
                System.out.println("返回第三段代码");
                response.addHeader("Content-Type","text/XML");
                sb.append("var fun = function(){alert( '执行第一段代码,我是由服务器端的Servlet传来的');return '执行第一段代码';}");   
            }
            //服务器返回给index.jsp的response
            response.getWriter().write(sb.toString());
        }
        else
        {
            System.out.println("bad reqest");
        }
    }

运行界面:
起始页:

    先点击“提交”按钮,提交到Servlet,在Servlet中拼出来一个字符串:
"var fun = function(){alert( '执行第一段代码,我是由服务器端的Servlet传来的');return '执行第一段代码';}"
    通过response把这段字符串传回index.jsp,index.jsp通过eval方法执行上述字符串,就动态声明了一个叫fun的JavaScript函数。
    点击“测试”按钮,点击事件中调用fun函数。
    就是这些,希望朋友们看完多提宝贵的意见,互相促进,谢谢!!!

    在附件里是全部代码。

  • DongTaiJiaZaiDaiMai.rar (95.9 KB)
  • 描述: 使用Ajax从服务器段动态生成JavaScript代码的全部源代码
  • 下载次数: 42
分享到:
评论

相关推荐

    ajax代码 ajax代码

    ASP是微软开发的一种服务器端脚本环境,用于生成动态网页。在ASP中集成Ajax,可以创建交互性强、响应速度快的Web应用。 6. **示例代码**:压缩包中的`foundations-of-ajax-examples`可能包含了基础的Ajax应用示例,...

    JSP&Servlet&JavaScript&Ajax&jQuery源代码

    通过学习和实践这些源代码,你可以了解到如何使用JSP创建动态网页,如何利用Servlet处理HTTP请求,如何运用JavaScript和jQuery增强用户交互,以及如何使用Ajax实现页面的无刷新更新。这些技术的结合使用,是构建现代...

    ajax动态生成树型菜单

    在本项目中,我们将探讨如何使用Ajax、Struts2框架以及Dojo库来动态地从数据库中获取数据并生成树型菜单。这个功能常见于网站的导航系统,允许用户以层级结构浏览和操作数据。 首先,`Ajax`(Asynchronous ...

    使用AJAX动态生成table表格数据和jquery.pagination.js 的分页栏

    AJAX(Asynchronous JavaScript and XML)允许我们在不刷新整个页面的情况下与服务器交换数据并更新部分网页内容,而`jquery.pagination.js`则提供了简洁的分页解决方案。 首先,我们需要理解AJAX的工作原理。AJAX...

    AJAX无刷新 支持私聊 动态生成好友列表 聊天室

    好友列表可以通过AJAX从服务器获取,可能包括好友ID、昵称、头像等信息。这些信息可以存储在数据库中,通过API接口按需提供给前端。前端根据返回的数据动态创建列表项,实现列表的实时更新。 5. 聊天室架构: 本...

    使用ajax动态树生成

    总的来说,"使用ajax动态树生成"涉及到的技术栈包括:前端的JavaScript(Ajax、JSON处理)、后端的JSP(Servlet)、以及数据库操作(MySQL)。通过合理运用这些技术,我们可以构建出交互性良好、响应快速的动态树形...

    采用ajax技术实现大批量数据批量生成Html

    在IT行业中,Ajax(Asynchronous JavaScript and XML)技术是一种用于创建快速、动态网页的重要方法。它允许网页在不重新加载整个页面的情况下与服务器交换数据并更新部分网页内容,从而提升了用户体验。本文将深入...

    ajax动态生成树 用于jsp

    标签"ajax的动态树的生成代码"提示我们在服务器端(这里是JSP)需要生成树的数据。这通常涉及到数据库查询或者静态数据的读取。例如,使用Java的Servlet或JSP内置对象来处理请求: ```jsp ;charset=UTF-8" ...

    ajax验证码 验证码ajax 生成中文验证码

    1. **服务器端生成验证码**:服务器上需要有一个生成验证码的逻辑,这通常涉及到随机生成一组中文字符或数字,然后将其存储到服务器会话(session)或者Cookie中,以供后续验证使用。 2. **Ajax请求**:当用户触发...

    ajax读取xml动态生成树

    在网页开发中,"Ajax(异步JavaScript和XML)读取XML动态生成树"是一种常见的交互式数据展示技术。这个过程通常涉及到前端JavaScript库或框架,如jQuery、Vue.js或React,通过Ajax请求获取服务器上的XML数据,然后...

    .NET+AJAX动态生成可选择列表

    在.NET平台上,结合AJAX(Asynchronous JavaScript and XML)技术,可以实现动态生成可选择列表,从而提升用户体验,提供高效且交互性强的Web应用程序。AJAX的核心在于利用JavaScript异步地与服务器进行数据交换,...

    javascript里使用php代码实例.docx

    - 当需要在JavaScript中动态获取服务器数据时,通常使用AJAX(Asynchronous JavaScript and XML)技术。虽然名字中有XML,但现代的AJAX请求通常使用JSON格式传输数据。 - 示例中没有直接展示AJAX请求,但`$.search...

    extjs动态生成表格,前台+后台

    在这里,它会创建一个新的Store对象,用于存储从服务器获取的数据,以及新的ColumnModel对象,包含所有动态生成的列。最后,利用这些信息实例化一个新的GridPanel,并将其附加到之前定义的`grid_div`元素上。 后端...

    Ajax.图表生成Ajax.图表生成

    当我们谈论Ajax图表生成时,我们指的是使用Ajax技术动态地创建和更新图表的过程。这种功能在数据分析、监控系统、商业智能应用等领域广泛应用,因为它能实时展示数据变化,帮助用户直观理解大量复杂信息。 要实现...

    AJAX动态树形目录

    1. AJAX基础:AJAX的核心是JavaScript对象XMLHttpRequest,它允许前端向服务器发送异步请求,获取数据并更新页面。在本实例中,当用户点击树形目录的某个节点时,AJAX会向服务器发送请求,获取下一级目录的信息,...

    Ajax tree,动态生成Tree

    Ajax Tree的核心在于使用XMLHttpRequest对象与服务器通信,获取树节点的数据,然后利用JavaScript动态构建或更新DOM树。这一过程通常分为以下几个步骤: 1. **初始化**:在用户界面加载时,创建一个空的树结构,...

    Ajax+Asp实现批量生成静态页面进度条

    在IT行业中,Ajax(异步JavaScript和XML)与ASP(Active Server Pages)的结合常常用于构建动态、交互性强的Web应用程序。本项目“Ajax+Asp实现批量生成静态页面进度条”提供了一个实用示例,教你如何利用这两种技术...

    AJAX通过跨域传输信息生成PDF文件

    在我们的场景中,TCPDF接收从AJAX请求传来的数据,然后根据这些数据生成PDF文件。TCPDF提供了丰富的API,可以设置字体、颜色、边距、页面方向等,以及插入图像、表格、链接等复杂元素。 生成PDF的过程大致如下: 1....

    基于DWR的AJAX技术研究与实现 (1).pdf

    DWR在服务器端生成JavaScript代码,然后将其发送到客户端,客户端可以使用这些JavaScript对象来访问服务器端的对象。这样,DWR使得Java开发者可以轻松地在Web开发中使用AJAX技术,而不需要编写复杂的JavaScript代码...

Global site tag (gtag.js) - Google Analytics