ajax实现mvc模式

news/2024/7/3 14:38:14

自从使用了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("我正在写博客园的博客");
    }

}

 

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

转载于:https://www.cnblogs.com/shenliang123/archive/2012/05/14/2499317.html


http://www.niftyadmin.cn/n/673104.html

相关文章

开盘前1.5秒下单可追涨停股

因为盛传有新资产注入&#xff0c;中远洋(601919)自7月25日停牌9月4日复牌以来&#xff0c;已连续两天开盘即封死涨停&#xff0c;证券分析人士认为其还应有两个涨停板。这种情况下&#xff0c;如果股民还想买入该股票&#xff0c;是否还有机会&#xff1f;如何操作才可实现&am…

开发杀手级企业应用10规则

卓越的企业级 App 要7*24小时在线&#xff0c;保持机警&#xff0c;能帮助员工抓住每一个机会。下面就来看一下如何构建。 你也许认为你和你的团队都已经拥有了个人电脑。 但是根据 Lextech Global Services&#xff08;一家移动 app 设计与开发公司&#xff09;的 CEO Alex Br…

股票中的K线理论

K线理论 -------------------------------------------------------------------------------- 碟型 1&#xff0e;型态分析 碟型的股价与成交量变动情形和圆形反转型态差不多&#xff0c;标准的碟型是以一连串一个以上的圆形底的型态出现&#xff0c;后一个的平均价格要比前一…

hbase表结构设计研究

因为一直在做hbase的应用层面的开发&#xff0c;所以体会的比较深的一点是hbase的表结构设计会对系统的性能以及开销上造成很大的区别&#xff0c;本篇文章先按照hbase表中的rowkey、columnfamily、column、timestamp几个方面进行一些分析。最后结合分析如何设计一种适合应用的…

PHP成员变量作用域的限制-private

使用PHP编写个类,我们应该尽量避免动态改变类的成员变量,而将成员变量作用于定位private,使用get和set方法来获取这些成员变量,如 1 <html>2 <body>3 <?php4 class Man {5 private $name;6 7 …

资产注入概念股

600676&#xff0c;交运股份收购控股股东相关资产上海交运集团公司.600246&#xff0c;万通先锋收购万通时尚股权。600528&#xff0c;中铁二局收购集团公司相关资产。600820&#xff0c;隧道股份对高桥随道机械增资。600547&#xff0c;山东黄金收购集团公司相关资产。000562&…

Moon.ORM 3.8 发布 支持sqlite代码生成器 一些BUG修改 附带demo 可以直接运行

下载地址:/Files/humble/Moon-ORM-3.8.7z使用说明:http://www.cnblogs.com/humble/archive/2012/04/08/2437752.html相关问题及版权和自述:http://www.cnblogs.com/humble/archive/2012/05/20/2510756.html它的不同之处和优点:http://www.cnblogs.com/humble/archive/2012/04/0…

Windbg命令学习13(ln和伪寄存器)

1.ln ln 命令显示给定地址处的或者最近的符号。 ln表示list near&#xff0c;ln命令将尽可能地给出与特定地址相关的符号&#xff0c;如果没有符号能够精确地与这个地址匹配&#xff0c;那么调试器将通过指针算法对靠近这地址的符号进行运逄&#xff0c; 并返回运算结果符号 0:…