`
bellstar
  • 浏览: 150637 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

javascript总结(四)ajax局部刷新与RPC

阅读更多

目录
(一)有关框架
(二)文件组织与代码组织
(三)JS与FLASH交互
(四)ajax局部刷新与RPC
  (五)获取设置元素样式与监听元素事件
  (六)页面元素的创建调整与关联
(七)浏览器兼容性问题
(八)WEB软件的前端架构实践

文章中的代码只为表达文章意义,非真正能执行的代码。
不同目的ajax请求

一、使用ajax进行局部更新
目前项目中的主要几种
1、切换到新的TAB时局部更新
自定义实现了TabPanel,主要通过在元素上设置属性来设置参数,这样做的好处是不必在代码中写参杂页面控制逻辑。结构如下,当子节点没有设置相关属性时,从父节点设置的属性中获取。
<h3>新闻</h3>
<ul renderTo="#newsContent" class="tabpanel" url="http://www.a.com/?category=$0&count=$1" >
    <li>
          <a  data="tech,8" renderTo="#newsContent" class="tab on" before="js code" after="js code">科技</a>
    </li>
    <li>
         <a data="economic,9" class="tab">经济</a>
    </li>
    <li></li>
</ul>
<div id="newsContent">

</div>

属性含义:
renderTo: 渲染到哪个元素
url: 请求的地址的模板
data:替换url中的参数
before: 载入前要执行的代码
after: 载入后要执行的代码

2、弹出一个浮动窗口,内容由ajax获取
这个实现也比较简单,写一下调用示例:
ibm.popup({
   url: " http://www.a.com/login",
   params: {theme: "sky"},
   html: "",   //如果指定了内容,则不会发起请求
   modal: true, //窗口是否为模态
   time: -1, //指定时间内自动关闭
   success: function(){  
       ibm.initLogin();
   }
})


3、点击一个按钮后进行局部更新
简单的直接onclick="jQuery('selExp').load('url')";
复杂的直接调用业务方法

4、通过RPC请求新增一条数据或删除一条数据后进行局部更新
为了保持前端无状态,删除或添加后都局部刷新整个列表,除非这样做会导致系统负担,才手动操作DOM做假的增加删除。
如果这一块的HTML比较多,导致更新局部的时候获取的HTML比较大,或者用户做这种局部更新比较频繁,就考虑把模板放到前端,然后每次只请求数据,然后由前端完成渲染工作。相关介绍见金大为的文章。雏凤清音 -- 面向数据的前端编程方法


二、使用ajax提交表单
比较简单,主要使用jQuey+插件validation来做。
表单的参数由元素name指定,不用用户输入的参数通过<input type="hidden" />来实现,一般不在JS方法中对提交的后台的参数进行增加或修改操作。

三、使用ajax进行远程过程调用(RPC)
RPC我们遵行的是JSON RPC规范。根据是否跨域,我们有两种实现,不跨域的时候是POST请求,跨域情况下,我们采用导入脚本的方式。当然,RPC接口是统一的,是否跨域根据URL自动判断,晒一下方法签名
	
   /**
     * @param {String} url 
     * @param {Object} params 
     * @param {Function | String} successFn 成功后的回调
     *       如果为字符串,将显示该消息,且不显示返回数据中的消息
     *       未提供此参数,判断成功后,尝试从返回数据中提取消息进行显示
     * @param {Function | String} failFn 失败后的回调
     *       如果为字符串,将显示该消息,且不显示返回数据中的消息
     *       未提供此参数,在判断RPC操作失败时,将尝试从返回数据中提取错误消息进行显示
     */
	rpc: function(url, params, successFn, failFn) {
          //code
        }

    //使用示例
   rpc("http://www.a.com/user/updateMoney", {value: money}, function(data){
        jQuery("#userMoney").text(data.money)
   }) 

RPC操作超过2秒后没有得么响应,将弹出一个系统繁忙提示的DIV模拟模态弹出窗口,防止用户重复点击提交。
在我们的项目中,后台程序统一了一个响应前端RPC的方法,处理前端响应的业务代码中在响应请求时调用那个方法,以使得统一以及返回数据遵行JSON RPC规范。
其它RPC的实现也有很多,如PHP RPC


全局ajax设置及错误处理
用jQuery实现统一的ajax全局设置还是比较简单的
网络连接中断,超时以及当HTTP HEAD中state code非200时都会报错。
目前以下代码无法在IE下驱分出网站连接中断与超时,FF下与CHROME下可以。
代码看起来比较乱
function initAjax() {
        jQuery.ajaxSetup({
			timeout: 10000,
                        cache: false
        });
        $(document.body).ajaxComplete(function(event, request, ajaxOption, state){
                   if(!Comm.browser.isIE  && state == "timeout"){
                          Comm.onceError("请求超时,请稍候重试!");
                   }
                }).ajaxError(function(event, request, ajaxOption,  thrownError){
                    var passError = /&passerror=|^passerror=/;
                    var hasJsonName = /&jsonName=|^jsonName=/;
                    var data = ajaxOption.data;
                    var isJsonRPC = data && hasJsonName.test(data) && (!passError.test(data));
                    try{
                            if(!Comm.browser.isIE && (!request || request.status == 0)){
                                    Comm.onceError("网络连接中断,请检查你的网络连接");
                                    return;
                            }
                            var state_code = request.status.toString().substr(0, 3);
                            if (state_code != "200") {
                                    var msg = '';
                                    msg = $HTTP_STATE_CODE[state_code];
                                    if(msg) msg = msg[1] || msg[0];
                                    if (!msg) msg = "请求数据失败,请稍后重试";
                                    if (state_code == "401") Comm.error(msg, function() {
                                            top.location.href = "http://www.a.com/login";
                                                    return;
                                            });
                                    if (isJsonRPC) Comm.error(msg);
                            }
                    }catch(e){
                            if(Comm.browser.isIE)Comm.onceError("请求超时,请稍候重试!");
                    }
            })
    }
分享到:
评论
5 楼 86asm 2010-04-06  
bellstar 写道
qiren83 写道
一个做过后端开发的人 最终走在前端是需要勇气的

想知道楼主现在的月薪多少 在哪家上班(如果是大公司的话)

谢谢 期待你的回答


我做程序员以来,一直就偏向于喜欢研究前端技术,因为前端的纷乱以及不成熟,更有机会创新,以目前WEB化的趋势,随着HTML5的到来,前端技术的重要性将更加突出。目前在一小公司做WEB GAME。


  的确,web前端技术太杂乱了。调试起来也比较麻烦,该死的ie6问题还不少
4 楼 bellstar 2010-04-05  
qiren83 写道
一个做过后端开发的人 最终走在前端是需要勇气的

想知道楼主现在的月薪多少 在哪家上班(如果是大公司的话)

谢谢 期待你的回答


我做程序员以来,一直就偏向于喜欢研究前端技术,因为前端的纷乱以及不成熟,更有机会创新,以目前WEB化的趋势,随着HTML5的到来,前端技术的重要性将更加突出。目前在一小公司做WEB GAME。
3 楼 qiren83 2010-04-05  
一个做过后端开发的人 最终走在前端是需要勇气的

想知道楼主现在的月薪多少 在哪家上班(如果是大公司的话)

谢谢 期待你的回答
2 楼 xiaochong4 2010-04-01  
有图才有真相!
1 楼 pouyang 2010-03-31  
能附上下载就更好了

相关推荐

    AJAX DWR框架实现部分刷新效果

    AJAX通过在后台与服务器进行异步通信,实现了页面的局部刷新。 DWR(Direct Web Remoting)是一个开源Java框架,它简化了AJAX在Java应用程序中的应用。DWR使得JavaScript和Java之间可以直接通信,就像它们是同一...

    AJAXRPC 让 javascript 直接调用服务端方法

    3. **原理**:AJAXRPC基于HTTP协议,利用XMLHttpRequest对象创建请求,服务端处理请求并返回数据,JavaScript处理响应数据,从而实现页面的局部刷新。 4. **优点**:提高用户体验,减少网络传输,降低服务器压力,...

    ajax应用j2ee实例

    通过创建 XMLHttpRequest 实例,设置请求参数,发送请求,以及处理服务器响应,我们可以实现页面的局部刷新。 2. **JSP 与 Ajax 结合** JSP 作为服务器端脚本语言,用于生成动态网页内容。在JSP页面中嵌入 ...

    基于JSON_RPC异步通讯技术的WEB实现.pdf

    这种方法可以实现“富服务器瘦客户机”的目的,解决了网页的局部刷新和客户端唯一性验证等问题。 与传统AJAX异步通讯技术的比较 传统的AJAX异步通讯技术习惯于采用AJAX+JSON形式进行编程,这需要在HTML文件或者JSP...

    PHP & Ajax

    - **含义**:Ajax的核心在于通过JavaScript异步地与服务器通信,实现局部更新页面的效果。 - **作用**:使网页应用程序能够快速显示用户交互的结果,并且只对发生改变的部分进行更新,无需刷新整个页面。 - **...

    GWT ajax开发(Eclipse Ajax)基础学习

    GWT通过内置的Ajax机制,使开发者可以方便地实现异步数据更新和页面局部刷新。 总的来说,GWT作为Google的开源工具包,为开发复杂的Web应用程序提供了便利。它不仅提供了丰富的UI组件库,简化了AJAX开发,还通过...

    dwr框架入门学习文档

    2. DWR 框架可以实现局部刷新,提高用户体验。 3. DWR 框架可以实现服务器端和客户端的松耦合,提高开发效率。 4. DWR 框架可以实现跨浏览器的兼容性,提高应用程序的可移植性。 三、DWR 框架的基本组件 1. 服务器...

    ajax-DWR教程讲义.rar

    - **DOM操作**:获取和修改网页的结构,实现局部刷新。 - **数据格式化**:XML、JSON等,用于在客户端和服务器间传递数据。 而DWR框架则简化了这些过程,它提供了以下特性: - **自动编译和安全检查**:确保...

    SD大会精品讲座:利用AJAX/Java 技术建立高流量的即时双向沟通网站

    AJAX技术作为一种能够实现页面局部刷新的技术,在提升用户体验方面发挥了重要作用。而Java作为后端开发中的主流语言之一,与AJAX结合可以更好地支持服务器端的数据处理与服务提供。通过本次讲座,我们将会了解到如何...

    AJAX基础概念、核心技术与典型案例(内涵动态实例)

    JsWeb 传统的JavaScript模式实现刷新 IframeWeb 基于框架的不刷新模式 AjaxWeb 基于Ajax的Web 2.0模式的刷新模式 AsyncAjaxSample Ajax异步调用的完整示例 第2章(/C02/) 2.1.htm 3...

    ajax_transportation_methods.ppt

    **Ajax(Asynchronous JavaScript and XML)**是一种网页开发技术,它允许在不重新加载整个页面的情况下与服务器交换数据并更新部分网页内容。Ajax的核心组件是`XMLHttpRequest`对象,它是JavaScript的一个内置对象...

    GWT-Ajax

    Ajax技术的关键组成部分包括XMLHttpRequest对象、JavaScript、DOM操作以及CSS,这些组件共同构成了异步数据传输、局部页面更新的能力。 **2. GWT的特性** - **Java编程**:GWT允许开发者使用Java语言编写前端代码,...

    Gwt In Action

    Ajax(Asynchronous JavaScript and XML)是一种创建动态网页的技术,通过在后台与服务器进行少量数据交换,使得网页实现局部刷新,提升用户体验。GWT内建了对Ajax的支持,通过异步请求(RPC)和JSON数据格式,可以...

    AJAX 客户端响应速度提高分析

    AJAX(Asynchronous JavaScript and XML)技术被广泛用于创建交互性强、用户体验良好的Web应用程序,它允许页面在不刷新整个页面的情况下与服务器交换数据并更新部分网页内容。然而,实际应用中,AJAX可能会导致响应...

    gwt开发实例实现

    - **Ajax技术**:Ajax(Asynchronous JavaScript and XML)允许Web页面在不刷新整个页面的情况下,通过后台与服务器交换数据并局部更新页面。GWT内置了对Ajax的支持,开发者可以通过异步请求来更新页面内容,提升...

    js调用外部天气预报,手机查询等webservices

    1. AJAX(Asynchronous JavaScript and XML):AJAX技术使得网页可以在不刷新整个页面的情况下与服务器进行异步交互。通过创建XMLHttpRequest对象,JS可以发送HTTP请求到Web服务并接收响应数据,实现页面的局部更新...

    DWR学习笔记

    1. **数据获取**:DWR允许JavaScript通过Ajax的方式从服务器端的一个符合特定规则的Servlet中提取数据,这一过程遵循AJAX的基本原则,即异步请求和局部刷新,无需页面整体重载即可更新部分内容。 2. **数据展示**:...

Global site tag (gtag.js) - Google Analytics