/**
* 转载请注明作者longdick http://longdick.iteye.com
*
*/
试试纯粹的Ajax吧(一)-----Give me a try!
试试纯粹的Ajax吧 (三)----JSON Now!
我们已经做了一个简单的Ajax应用,这个应用里服务端向客户端返回了数据,但是客户端并没有向服务端发送数据,代码如下:
function getValue(){
createRequest(); //创建一个新的Request
var url="servlet\\AjaxServlet"; //指定服务端的URL地址,在这里是我们的servlet访问地址
request.open("GET",url,true);
request.onreadystatechange=updatePage;
request.send(null);
}
如果需要向服务端传送参数的话该怎么做呢?
我们只需要在url地址这里加上参数就可以,var url="servlet\\AjaxServlet?address=myHome";
然后在服务端取得这个叫address的参数值就可以了。
代码如下:
private int i=0;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String address=request.getParameter("address");
response.getWriter().write(address+String.valueOf(i++));
}
同时传多个参数都可以,但是有一个注意的地方,就是直接在url里传参数有一个参数长度的上限值,不同的浏览器上限值不同,IE大概是2000个字符;所以,如果你要传给服务端的参数如果较长,最好不要使用这种方式。
作为应对这种情况的手段,我们做如下更改:
function getValue(){
createRequest(); //创建一个新的Request
var url="servlet\\AjaxServlet"; //指定服务端的URL地址,在这里是我们的servlet访问地址
request.open("POST",url,true);
request.onreadystatechange=updatePage;
request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
request.send(“address=myHome”);
}
请求发送方式改为"POST",然后在send方法里加上参数,这样就不会受参数长度的限制了。但是这时候需要设置request的Content-Type为"appliction/x-www-form-urlencoded",通知服务端像接收表单数据一样接收参数。
然后再发送请求。
现在客户端和服务端之间能够相互交流了,呵呵。。。。
等等,这时候我们用的是request的属性responseText来接收服务端的返回值的,还记得吗:
function updatePage(){
if(request.readyState==4){
if(request.status==200){
var v=request.responseText;
document.form1.text1.value=v;
}else
alert("error status:"+request.status);
}
}
大部分情况下这个属性运作良好。但是,这个属性只能接收一个字符串;如果我们需要服务端返回多个值呢,那要怎么办???
有人说,好办,我在服务端把多个值凑一块去,做成一个字符串,中间用个字符分隔一下,再传给客户端脚本,在客户端split一下。。。。
这种方法的确能解决这个问题,但是,同时它带来了一些麻烦:服务端和客户端要在每个值排列的顺序定义上保持严格一致,否则会拿到错误的数据;而且,增加一个值和减少一个值都比较麻烦。
解决这个麻烦的最好方式其实是使用一个XML数据作为返回值,然后用request的另外一个属性responseXml来接收这个数据,servlet里面可以这样写:
private int i=0;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String address=request.getParameter("address");
response.setHeader("Content-Type", "text/xml");
response.getWriter().write("<Root><Add>"+address+"</Add><Num>"+String.valueOf(i++)+"</Num></Root>");
}
这时候注意response返回的是一个XML结构的数据,而不再是我们以前用的Plain Text了。所以,我们在服务端返回数据之前,先设置一下Content-Type为'text/xml',说明接下来传输的是xml数据。
而在客户端脚本里,我们这时候不再是使用responseText这个属性来接收了,因为从服务器返回的xml数据已经转成一棵树对象,这个树的名字就叫DOM(文档对象模型),存放在responseXml这个属性里;然后,我们可以利用DOM的特性来取得这个XML里面的值。
function updatePage(){
if(request.readyState==4){
if(request.status==200){
var v=request.responseXML;
root=v.getElementsByTagName('Root')[0];
add=root.getElementsByTagName('Add')[0].firstChild.nodeValue;
num=root.getElementsByTagName('Num')[0].firstChild.nodeValue;
document.form1.text1.value=add+num;
request=null;//清空request
}else
alert("error status:"+request.status);
}
}
以上是遍历DOM节点的一些基本操作,关于DOM的操作,可以查看相应资料。
如上所述,我们用返回xml的方式获得了多个返回数据,发送有多参数的请求的时候也可以发送xml给服务端,但是一般不建议那样做,会造成服务端额外的解析任务。而且通过网络传输Object是不行的,首先会把这个xml对象序列化以后再通过网络传输,带有标签的xml数据比纯粹的name/value pairs多出很多数据,比较臃肿。 所以,request发送请求的时候尽量还是使用 plain text 的参数对,服务端返回多个数据的时候可以选用xml,如果只返回一个数据,那还是用plain text 吧。
分享到:
相关推荐
Ajax-ajax-contact-form-wordpress.zip,wordpress的联系人表单,ajax代表异步javascript和xml。它是多种web技术的集合,包括html、css、json、xml和javascript。它用于创建动态网页,其中网页的小部分在不重新加载...
Ajax-wc-ajax-product-filter.zip,Woomerce AJAX产品过滤器-是一个插件,允许您根据类别、属性和价格轻松过滤产品。您可以对产品进行排序,导航到下一页和上一页,而无需重新加载该页。,ajax代表异步javascript和xml...
Ajax-learn-to-send-email-via-google-script-html-no-server.zip,使用HTML表单(例如网站上的“联系我们”)发送电子邮件而不使用后端服务器(使用谷歌脚本)的示例非常适合需要收集数据的静态网站。,ajax代表异步...
Ajax4jsf是针对JavaServer Faces (JSF) 技术的一个扩展,它允许开发者在JSF应用中无缝集成Ajax功能,提升用户界面的交互性和响应性。 【描述】提到的“具体自己看吧”意味着这个压缩包包含了完整的源代码,用户需要...
包含的“dynatrace-AJAX-edition-4.2.0.1528.msi”是Windows Installer文件,用于在Windows操作系统上安装Dynatrace AJAX Edition。安装过程通常包括接受许可协议、选择安装路径、配置初始设置等步骤。安装完成后,...
Ajax-bootstrap-select-ajax.zip,bootstrap select对数据源的ajax支持,ajax代表异步javascript和xml。它是多种web技术的集合,包括html、css、json、xml和javascript。它用于创建动态网页,其中网页的小部分在不重新...
Ajax-gunbasic-js.zip,gunbasic js是一个库,用于快速开发基于ajax的web应用程序,这些应用程序易于独立测试。编写ajax代码只需要一行客户端js和服务器中的实现。适用于快速成型和团队开发。,ajax代表异步javascript...
Ajax-ajax-shopping-cart-page.zip,magento 2购物车页面ajax更新数量,ajax代表异步javascript和xml。它是多种web技术的集合,包括html、css、json、xml和javascript。它用于创建动态网页,其中网页的小部分在不重新...
Ajax-ajax-blob-downloader.zip,从ajax请求下载blob,ajax代表异步javascript和xml。它是多种web技术的集合,包括html、css、json、xml和javascript。它用于创建动态网页,其中网页的小部分在不重新加载网页的情况下...
Ajax-ajax-todo-list.zip,客户端渲染SPA(单页应用程序)实践。这个项目使用ajax来发送请求,node.js来处理api。,ajax代表异步javascript和xml。它是多种web技术的集合,包括html、css、json、xml和javascript。它...
【标题】"Google-AJAX-Search-API.rar" 涉及的是谷歌的 AJAX(Asynchronous JavaScript and XML)搜索 API,这是一个允许开发者在他们的网页上嵌入动态、实时的谷歌搜索功能的技术。这个API利用了AJAX技术,使得用户...
Ajax-Magento-ajax-add-to-cart.zip,[模块magento 1]magento ajax添加到购物车-ajoter vos produits au panier en ajax/感谢ajax将您的产品添加到购物车,ajax代表异步javascript和xml。它是多种web技术的集合,包括...
Ajax-ajax-ex-boolflix.zip,副本di netflix、con js、html和css、con utilizzo di handlebars、fontawesome和chiamate ajax,ajax代表异步javascript和xml。它是多种web技术的集合,包括html、css、json、xml和...
Ajax-magento2-ajax-layered-navigation.zip,ajax分层导航magento 2提供了一个过滤器列表,帮助您的客户以最短的方式搜索和获得他们最喜欢的产品。这个扩展应用了现代ajax技术来增强过滤系统,以提高用户对页面上每...
Ajax-ajax-live-search.zip,ajax live search是一个php搜索表单,类似于google autocomplete特性,在您输入结果时显示结果。,ajax代表异步javascript和xml。它是多种web技术的集合,包括html、css、json、xml和...
Ajax-magento2-ajax-cart-quick.zip,magento 2 ajax购物车扩展插件提供舒适的购物体验。客户可以很容易地选择可配置的选项并在弹出窗口中编辑项目,而不会浪费重新加载页面的时间。,ajax代表异步javascript和xml。它...
Ajax-Codeigniter-3-Ajax-Form-Submission.zip,“codeigniter 3 ajax表单提交和验证教程”一集的源代码,ajax代表异步javascript和xml。它是多种web技术的集合,包括html、css、json、xml和javascript。它用于创建...
Ajax-sinatra-api-server-toolbox.zip,sinatra api服务器工具箱(ruby、sinatra、activerecord、postgresql、json、jquery、ajax),ajax代表异步javascript和xml。它是多种web技术的集合,包括html、css、json、xml...
《实战AJAX-------简单实例解析》博文对应的源码,博文地址:http://blog.csdn.net/harvic880925/article/details/8736908,有兴趣的朋友可以去看看
ajax4jsf-1.0.6.jarajax4jsf-1.0.6.jarajax4jsf-1.0.6.jar