- 浏览: 1172553 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
zhizhen23:
LZ 提供的链接地址失效了
重写的isPlainObject方法 -
LovingBaby:
LovingBaby 写道function fun() {}f ...
读jq之二(两种扩展) -
LovingBaby:
说的很清楚!jQuery作者为了实现简洁调用的苦心!高超的编程 ...
读jq之一(jq对象的组成) -
hard_ly:
...
将伪数组转换成数组 -
zlxzlxzlxzlxzlx:
这不能算是任意进制之间的转换,例如二十六进制、十二进制又该如何 ...
用递归实现十进制数转换N进制
接上篇。引入了一个私有函数_serialize,它会把js对象串行化成HTTP所需参数模式,接受如下两种结构
{name:'jack',age:20} --> name=jack&age=20 {fruit:['apple','banana','orange']} --> fruit=apple&fruit=banana&fruit=orange
请求后台的一个servlet,发送参数name=jack,age=20,默认使用异步,GET方式。现在data可以如下了
Ajax.request('servlet/ServletJSON',{ data : {name:'jack',age:20}, success : function(xhr){ //to do with xhr }, failure : function(xhr){ //to do with xhr } } );
完整代码
/** * 执行基本ajax请求,返回XMLHttpRequest * Ajax.request(url,{ * async 是否异步 true(默认) * method 请求方式 POST or GET(默认) * encode 请求的编码 UTF-8(默认) * data 请求参数 (键值对字符串或js对象) * success 请求成功后响应函数 参数为xhr * failure 请求失败后响应函数 参数为xhr * }); * */ var Ajax = function(){ function request(url,opt){ function fn(){} var async = opt.async !== false, method = opt.method || 'GET', encode = opt.encode || 'UTF-8', data = opt.data || null, success = opt.success || fn, failure = opt.failure || fn; method = method.toUpperCase(); if(data && typeof data == 'object'){//对象转换成字符串键值对 data = _serialize(data); } if(method == 'GET' && data){ url += (url.indexOf('?') == -1 ? '?' : '&') + data; data = null; } var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP'); xhr.onreadystatechange = function(){ _onStateChange(xhr,success,failure); }; xhr.open(method,url,async); if(method == 'POST'){ xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded;charset=' + encode); } xhr.send(data); return xhr; } function _serialize(obj){ var a = []; for(var k in obj){ var val = obj[k]; if(val.constructor == Array){ for(var i=0,len=val.length;i<len;i++){ a.push(k + '=' + encodeURIComponent(val[i])); } }else{ a.push(k + '=' + encodeURIComponent(val)); } } return a.join('&'); } function _onStateChange(xhr,success,failure){ if(xhr.readyState == 4){ var s = xhr.status; if(s>= 200 && s < 300){ success(xhr); }else{ failure(xhr); } }else{} } return {request:request}; }();
这里仅仅是使data可以是对象类型,貌似没啥大用。但如果与表单(form)结合的话还是很有用的。当我们使用form但又想用ajax方式提交,那么把form中元素序列化成HTTP请求的参数类型是一个费劲的活。这里写个工具函数formToHash,将form元素按键值形式转换成对象返回。
/** * 把表单内容转换为hash对象 * @param {HTMLElement} form对象 * @return {hash} * @example * formToHash(document.forms[0]); */ function formToHash(form){ var hash = {}, el; for(var i = 0,len = form.elements.length;i < len;i++){ el = form.elements[i]; if(el.name == "" || el.disabled) continue; switch(el.tagName.toLowerCase()){ case "fieldset": break; case "input": switch(el.type.toLowerCase()){ case "radio": if(el.checked) hash[el.name] = el.value; break; case "checkbox": if(el.checked){ if(!hash[el.name]){ hash[el.name] = [el.value]; }else{ hash[el.name].push(el.value); } } break; case "button": break; case "image": break; default: hash[el.name] = el.value; break; } break; case "select": if(el.multiple){ for(var j = 0, lens = el.options.length;j < lens; j++){ if(el.options[j].selected){ if(!hash[el.name]){ hash[el.name] = [el.options[j].value]; }else{ hash[el.name].push(el.options[j].value); } } } }else{ hash[el.name] = el.value; } break; default: hash[el.name] = el.value; break; } } form = el = null; return hash; }
好了,有了formToHash就可以将其返回的对象作为Ajax的参数data了,Ajax内部的_serialize能自动的将该对象转换成HTTP请求参数形式。
- ajax_0.2.rar (1.5 KB)
- 下载次数: 153
评论
8 楼
kimmking
2010-08-21
http://www.iteye.com/topic/644429
ray_linn 写道
最近发现自己在javaeye的言辞锋芒锐减了许多,自己也百思不得其解,后来终于发现,原来是最近的小白太多,放眼看去,各个板块里都是小白新手帖,如果一个个去点新手帖的话,估计都要得脉管炎了,而且那种水水的帖子,连开骂的兴趣都没有,抓这种帖子远不如以前抓robbin的“linux可以挂载新硬盘是比windows好的一个优点”这种帖子来得有意思。
介绍新东西,新思路,新想法的东西少了许多,不是谈SSH,就是说Rails,看得一点劲头没有,还是自己搞搞博吧。
介绍新东西,新思路,新想法的东西少了许多,不是谈SSH,就是说Rails,看得一点劲头没有,还是自己搞搞博吧。
7 楼
kimmking
2010-08-21
wu_quanyin 写道
javaDevil 写道
良好帖 (1) :: 新手帖 (10) ::
这么多人投新手,这贴挺好的啊。难道je大牛太多了
这么多人投新手,这贴挺好的啊。难道je大牛太多了
不是大牛太多,是菜鸟太多,,看别人再讲基础的东西,就投新手,基础才是最重要的,难道不知道
基础的东西,请发到入门讨论,谢谢。
6 楼
wu_quanyin
2010-08-21
javaDevil 写道
良好帖 (1) :: 新手帖 (10) ::
这么多人投新手,这贴挺好的啊。难道je大牛太多了
这么多人投新手,这贴挺好的啊。难道je大牛太多了
不是大牛太多,是菜鸟太多,,看别人再讲基础的东西,就投新手,基础才是最重要的,难道不知道
5 楼
surpass
2010-08-19
javaDevil 写道
良好帖 (1) :: 新手帖 (10) ::
这么多人投新手,这贴挺好的啊。难道je大牛太多了
这么多人投新手,这贴挺好的啊。难道je大牛太多了
x神太多。
4 楼
smzd
2010-08-19
很好很强大。不过愚以为,对于表单的处理可以对任何类型的键值配对都将值做成数组,而不只是checkbox这样处理。因为可能会有重名输入框的情况发生,这样不会导致只有一个值传到服务器上。而对于数组,即便只有一个也不影响系统处理,不是吗?
3 楼
javaDevil
2010-08-19
良好帖 (1) :: 新手帖 (10) ::
这么多人投新手,这贴挺好的啊。难道je大牛太多了
这么多人投新手,这贴挺好的啊。难道je大牛太多了
2 楼
Andrew1945
2010-08-19
LZ很强大啊,整理的很好啊,你们那些投新手的人啊...
1 楼
yangguo
2010-08-18
LZ实力很强大,继续关注学习。
发表评论
-
跨域请求之JSONP 五
2012-01-12 09:59 1448前面四篇与后台约定的是返回如下的结构 jsonp ... -
跨域请求之JSONP 四
2012-01-11 15:59 1626此次主要是接口调整与代码重构。 接口如下 // ... -
ajax后退解决方案(五)
2011-11-15 07:37 2040五、使用history.pushState ... -
ajax后退解决方案(四)
2011-11-14 11:08 1356三、通过修改location.hash产生历史,hashcha ... -
ajax后退解决方案(三)
2011-11-13 08:43 1107三、使用iframe,通过修改iframe.src产生历史,回 ... -
ajax后退解决方案(二)
2011-11-12 10:23 1433二、使用iframe,通过修改iframe.src产生历史 ... -
ajax后退解决方案(一)
2011-11-11 13:52 1511一、使用iframe,通过document.write产生历史 ... -
跨域请求之JSONP 三
2011-08-15 07:08 1784script请求返回JSON实际上是脚本注入。它虽然解决了跨域 ... -
跨域请求之JSONP 二
2011-08-14 08:25 778续上篇,加两个实用功能 1,增加data属性,请求参 ... -
跨域请求之JSONP 一
2011-08-13 10:46 1985跨域请求的方式有很多种, 1,ifram ... -
JS Queue LazyLoad 之二
2011-08-12 07:26 1422上一篇实现了对多个JS文件的顺序加载,这篇再完善丰富一下。加入 ... -
JS Queue LazyLoad 之一
2011-08-11 14:20 1447前面三篇实现了多个JS并行加载,即各个JS文件相互不依赖。实现 ... -
JS/CSS module LazyLoad 之三
2011-08-11 06:51 1579在开始这篇前,有两个小问题须说明一下 情况 ... -
JS/CSS module LazyLoad 之二
2011-08-10 09:33 1528上一篇完成的JS的按需加载,这篇添加个新方法css,完成对CS ... -
JS/CSS module LazyLoad 之一
2011-08-09 14:21 1570随着web app中JS越来越多,有时页面首次加载时有很多JS ... -
新API解析JSON---Ajax之七
2010-08-16 16:01 2312ECMAScript 5发布有段时间了,其中就包括了解析JSO ... -
创建xhr对象出现异常处理---Ajax之六
2010-08-16 15:40 1921前面几篇一直采用最精简的方式创建Ajax的核心XMLHttpR ... -
超时处理---Ajax之五
2010-08-16 14:49 4450上一篇只是检查是否超时,超时后却不做任何处理。这里如果超时,会 ... -
检查超时---Ajax之四
2010-08-16 11:17 2435有时发出一个请求,后 ... -
结果分类---Ajax之三
2010-08-16 09:37 1412Ajax中的x指的是xml,早期的数据格式都喜欢用xml,然后 ...
相关推荐
在Web开发中,有时我们想要在用户关闭页面的时候执行一些操作,比如发送一个Ajax请求到服务器进行数据上报或者完成某些清理工作。为了实现这个功能,我们可以利用浏览器提供的事件监听机制,特别是`beforeunload`和`...
【标题】:“结合AJAX进行PHP开发之入门” 【描述】:本文主要介绍如何使用AJAX(异步JavaScript和XML)技术与PHP结合,构建一个简单的相册应用。首先,我们将通过传统Web应用程序的方式实现相册功能,然后利用...
2. 发起HTTP请求:通过XMLHttpRequest对象的open()和send()方法,可以向服务器发送GET或POST请求,请求可以携带参数,比如用户的输入数据。 3. 处理服务器响应:当服务器返回响应时,XMLHttpRequest对象的...
-添加定时器控件Timer,用来定时发起AJAX请求。 +2009-09-06 v2.1.0 -Button的Pressed属性值能够正确的反映客户端的变化。 -优化Tree控件的AJAX实现。 +为页面的Form添加autocomplete="off"属性。 -参考...
- **HttpRemote.as**:此文件可能封装了与服务端通信的核心逻辑,包括初始化HttpService,设置请求参数,处理响应等。 - **AjaxRequestType.as**:这个文件可能是定义请求类型的枚举类,比如区分GET和POST请求,...
HTTP代理对于AJAX应用程序与托管Web应用程序以外的主机上的Web可访问服务进行通信很有用。 它是反向代理,实际上不是转发代理,尽管Servlet的模板形式可能会使这条线模糊。 这几乎不是第一个代理,为什么我要编写...
2. **使用Ajax改造上传**:由于KindEditor默认的上传方式可能不支持自定义token,我们需要自定义上传逻辑。在`beforeUpload`回调函数中,我们可以使用原生的XMLHttpRequest或者现代浏览器的fetch API来发送带有token...
-添加定时器控件Timer,用来定时发起AJAX请求。 +2009-09-06 v2.1.0 -Button的Pressed属性值能够正确的反映客户端的变化。 -优化Tree控件的AJAX实现。 +为页面的Form添加autocomplete="off"属性。 -参考...
- 使用`@ModelAttribute`将请求参数自动绑定到Java对象。 **问题十七:SpringMvc中函数的返回值是什么?** - 可以是视图名称或模型数据。 **问题十八:SpringMvc用什么对象从后台向前台传递数据的?** - 使用`...
- **超链接改造**:将普通超链接转换为 AJAX 请求。 - **参数传递**:实现在点击超链接时向服务器发送特定参数。 ##### 3.6 实现网页复杂提示信息框 - **设计思路**:考虑提示信息的样式和内容。 - **交互效果**:...
而在改造之前,同一个请求需要发送到`/ajax.php`并带上一系列的参数,包括dir、page、action以及args。很明显,改造后的调用方式更加简洁明了,更符合良好设计的Web API标准。 总结一下,通过使用jQuery的...
// 这里可以使用Ajax请求或其他方式获取数据 // page: 当前页码,pageSize: 每页大小 return $.ajax({ url: 'api/data', type: 'GET', data: { page: page, size: pageSize }, success: function(data) { //...
前端将这些参数通过Ajax发送到后端服务器,服务器接收到请求后,调用SDK中的检索接口,查找该时间段内的录像文件。 在后端,开发者需要实现一个新的接口,这个接口接受时间区间作为输入,查询海康威视设备上的录像...
比如,你可以调整分页请求的参数,或者增加新的数据处理逻辑。 2. 兼容性优化:确保插件在各种浏览器下正常工作,包括IE8及更低版本。 3. 性能优化:合理设置列宽和数据加载量,避免一次性加载过多数据导致页面...
2. Servlet:Servlet是Java的一个接口,用于扩展服务器的功能,处理HTTP请求。在图书管理系统中,Servlet充当了后台逻辑的中心,接收并响应用户的请求,如登录验证、图书查询、借阅操作等。通过定义不同的Servlet,...
在IT行业中,二次开发是指基于现有软件或系统进行的定制化改造或功能扩展,以满足特定用户需求。在这个场景中,我们关注的是"WEB32网页调用接口"的二次开发使用,它涉及到如何通过网页与后台服务进行交互,实现功能...
1、提交代码触发post请求给bus/refresh 2、server端接收到请求并发送给Spring Cloud Bus 3、Spring Cloud bus接到消息并通知给其它客户端 4、其它客户端接收到通知,请求Server端获取最新配置 5、全部客户端均获取到...
10. 基于 shiro 改造的 sso 单机实现,登录生成 token 存储在用户 cookies 中,请求解析 cookies,以解析成功作为标识。 11. 交互上使用 layui,使用第三方功能。 12. 热刷新实体 mapper.xml文件 MapperRefresh.java...
前端通过Ajax或其他异步方式实时获取反馈信息,提供给用户。`config.php`中的配置决定了插件的行为,而`info.ini`则提供了插件的元数据信息。整个过程中,PHP的面向对象编程和FastAdmin的框架优势得以充分发挥,使得...
首先,OSChina 的每日访问量非常大,IP 超过10万,动态请求高达300万,其中页面请求80万,Ajax 请求220万。高峰期并发连接数可达2000。为了应对这样的流量,OSChina 的硬件配置包括一台DELL SC 1435 服务器,配备双...