zoukankan      html  css  js  c++  java
  • ajax实现mvc模式

    自从使用了SHH2的mvc模式后现在喜欢什么都搞个mvc模式,根据mvc的架构确实不错

    在ajax中实现mvc模式:

    M(模型):由代表服务器端响应的对象充当,模型复杂从服务器读取数据,并负责通知控制器将数据更新(一般由XMLHttpRequest对象的responseText或responseXML充当)

    V(视图):通常由html页面的DOM元素充当,这些元素负责显示模型中的数据,并且让用户触发事件以驱动事件

    C(控制层):有js的事件处理函数充当,事件处理函数控制响应视图的事件,并将模型的改变动态的加载到html页面中

    而为了让Ajax保持较好的MVC架构,通常按照下面的规则干活:

    1.将js脚本单独写在一个.js文件中,然后在需要的页面中进行引入

    2.不要将事件处理函数绑定到html页面的元素属性中,即不要在元素的属性中添加onclick等事件,而是在js代码中进行绑定,即绑定到DOM对象的属性中

    3.将回调函数中执行的动态更新html页面的脚本单独写成一个js方法,而不直接写到事件处理函数中

    下面代码演示一个简单实现mvc:

    页面:

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <title>mvcTest.html</title>
        <meta http-equiv="content-type" content="text/html; charset=UTF-8">
        <!-- 引入js文件 -->
        <script type="text/javascript" src = "js/mvc.js"></script>
      </head>
      <body>
        <div id = "show"></div>
        <input type = "button" name = "test" id = "test" value = "提交">
      </body>
    </html>

    js:关于XMLHttpRequest的处理详细见http://www.cnblogs.com/shenliang123/archive/2012/05/13/2498524.html

    //创建XMLHttpRequest对象
    var objXMLHttp;
    function createXMLHttpRequest(){
        if(window.XMLHttpRequest){
            objXMLHttp = new XMLHttpRequest();
        }
        else{
            var MSXML = ['MSXML2.XMLHTTP.5.0', 'MSXML2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP', 'Microsoft.XMLHTTP'];
            for(var i = 0; n< MSXML.length; i++){
                try{
                    objXMLHttp = new ActiveXObject(MSXML[i]);
                    break;
                }catch(e){
                    alert("创建XMLHttpRequest对象失败");
                }
            }
        }    
    }
    //为test绑定事件处理函数
    document.getElementById("test").onclick = sendRequest;
    function sendRequest(){
        createXMLHttpRequest();
        alert(objXMLHttp);
        var url = "MVCServlet";
        objXMLHttp.open("POST", url, true);
        //设定消息请求头
        objXMLHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        //指定响应函数
        objXMLHttp.onreadystatechange = process;
        //发送请求
        objXMLHttp.send(null);
    }
    /**
     * process()为控制器函数
     */
    function process(){
        if(objXMLHttp.readyState == 4){
            if(objXMLHttp.status == 200){
                //调用视图函数而不是直接写在控制函数中
                show(objXMLHttp.responseText);
            }
        }
    }
    /**
     * 视图函数
     */
    function show(content){
        document.getElementById("show").innerHTML = content;
    }

    MVCServlet:

    package xidian.sl.ajax;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class MVCServlet extends HttpServlet {
    
        public void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            doGet(request, response);
        }
    
        public void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            response.setContentType("text/html");
            request.setCharacterEncoding("utf-8");
            response.setCharacterEncoding("utf-8");
            PrintWriter out = response.getWriter();
            out.print("我正在写博客园的博客");
        }
    
    }

    具体详细的设计思想下次继续

  • 相关阅读:
    cookie封装
    禁止网站某页面被频繁刷新(验证)
    $(...) is null
    svn: E155004: Working copy '/data/www' locked.
    svn checkout不带根文件夹方法
    IIS LUA推荐
    给Elasticsearch 5.2.2 设置用户权限 how to setting security for elasticsearch on windows
    怎么部署 .NET Core Web项目 到linux
    怎么删除Elasticsearch里的index内容
    Windows 计划任务 Task Schedule 怎么 运行 .bat文件
  • 原文地址:https://www.cnblogs.com/shenliang123/p/2499317.html
Copyright © 2011-2022 走看看