javascript总结(四)ajax局部刷新与RPC
目录
(一)有关框架
(二)文件组织与代码组织
(三)JS与FLASH交互
(四)ajax局部刷新与RPC
(五)获取设置元素样式与监听元素事件
(六)页面元素的创建调整与关联
(七)浏览器兼容性问题
(八)WEB软件的前端架构实践
文章中的代码只为表达文章意义,非真正能执行的代码。
不同目的ajax请求
一、使用ajax进行局部更新
目前项目中的主要几种
1、切换到新的TAB时局部更新
自定义实现了TabPanel,主要通过在元素上设置属性来设置参数,这样做的好处是不必在代码中写参杂页面控制逻辑。结构如下,当子节点没有设置相关属性时,从父节点设置的属性中获取。
<h3>新闻</h3><ul renderTo="#newsContent" url="http://www.a.com/?category=$0&count=$1" > <li> <a data="tech,8" renderTo="#newsContent" before="js code" after="js code">科技</a> </li> <li> <a data="economic,9" name="code">ibm.popup({ url: " http://www.a.com/login", params: {theme: "sky"}, html: "", //如果指定了内容,则不会发起请求 modal: true, //窗口是否为模态 time: -1, //指定时间内自动关闭 success: function(){ ibm.initLogin(); }}) /** * @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) })
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("请求超时,请稍候重试!"); } }) }