`
winkingfish
  • 浏览: 1463 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

javascript 进阶篇 Ajax 、JSON、 Prototype

 
阅读更多

Ajax

这个词听了不少,但是其实并没有真的接触过,于是在这里稍微了解一下。

Ajax技术的创新之处在于,改善了传统的“请求-等待-响应-刷新-返回数据”模式,在信息返回之前,用户可以继续自己的操作,当前页面不会因为请求而刷新。这样大大的提高了交互性。

Ajax其实并不是一个技术,而是由许多技术组成的。最大的特色之一就是可以异步传输,实现多线程服务。

Ajax的异步传输,依靠的是js中的XMLHttpRequst对象,于是我们从它入手。

XMLHttpRequest是XMLHttp组建的一个抽象对象,用于数据交互。在IE中,XMLHttpRequest作为一个ActiveX控件,在FF Opera中作为一个js的内置对象。

创建XMLHttpRequest对象的封装代码:

 

<script type="text/javascript">        
var xmlHttp=false;
var headType="";
function createXmlRequest(){
    if(window.ActiveObject){     //  IE
        try{
            xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
        }catch(e){
            try{
                xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
            }catch(e){
                window.alert("create XML Request failed "+e);
            }
        }
    }else if(window.XMLHttpRequest){   //  FF
        xmlHttp=new XMLHttpRequest();
    }
    if(!xmlHttp){
        window.alert("create XML Request failed");
    }
}
</script>

  

 

 

 

ReadyState属性

0=未初始化   1=初始化  2=发送数据  3=数据传送中  4=完成

responseText 属性

1、2=responseText是个空字符串   3=正在接收   4=接收完成

responseXML属性

执行过send()后,如果返回正确的xml格式数据,可以使用XMLHttpRequest接收返回的数据。responseXML可以把返回信息格式化为XML Document对象,类型为text/xml  如果不包含则返回null。

status属性

属性send()后,可以属性status接收读取事物状态,只有ReadyState为3、4时可以使用这个属性,否则读取status时将会发生错误。常见的有以下几个:

100=客户必须继续发出请求  200=交易成功  400=错误请求  403=请求不允许  404=没有发现文件,查询或URL  500=服务器内部错误  502=服务器暂不可用  505=服务器不支持或拒绝请求头中指定的HTTP版本。

statusText属性

send()方法后,通过statusText读取事务状态,statusText返回当前HTTP请求的状态行,只有当readyState为3 4时才可以使用这个属性,否则发生错误。

onreadystatechange事件:

这个事件属性值发生变化时所要执行的操作。

abort()方法

停止一个XMLHttpRequest对象对HTTP的请求,把该对象恢复到初始状态。

open()方法

创建一个新的HTTP请求,并指定方法,URL及验证信息等,语法是: xmlHttp.open(method,url,mode,user,psd);

method表示请求方法,有post, get, put等,忽略大小写。url是目的地址,mode是不二类型参数,指定请求是否为异步方式,默认为true。

调用open()方法后,readyState属性设置为1.

send()办法

xmlHttp.send(content);content是要发送的内容,没有可以忽略。

setRequestHeader()方法

setRequestHeader(header, value)设定单个HTTP头信息,当readyState为1时,可以在open()后调用此方法,否则将返回一个异常,如果已存在则原来的将覆盖。value用样是一个字符串型数据,表示头名称的值。

getResponseHeader()方法

通过读取首部信息,可以读取到content-type(内容类型), content-length(内容长度), last-modify(最后一次修改)日期等,根据具体网站不同。

getAllResponseHeaders()方法

获得全部的首部信息。

 

接下来举个例子,就是获取头信息的:

 

<html>
    <head>
        <title>Ajax test</title>    
        <script type="text/javascript">        
            var xmlHttp=false;
            var headType="";
            function createXmlRequest(){
                if(window.ActiveObject){//IE
try{
                     xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
                     }catch(e){
                         try{
                             xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
                         }catch(e){
                             window.alert("create XML Request failed "+e);
                         }
                     }
                }else if(window.XMLHttpRequest){   //  FF
                   xmlHttp=new XMLHttpRequest();
                }
                if(!xmlHttp){
                   window.alert("create XML Request failed");
                }
              }
             function HeadRequst(request){
                createXmlRequest();
                headType=request; 
                xmlHttp.onreadystatechange=getHeadInfo;  //注册回调函数不用括号。
                xmlHttp.open("HEAD","http://www.baidu.com/",false);
                xmlHttp.send(null);
             }
             function getHeadInfo(){
                 var span=document.getElementById("state");
                 if(xmlHttp.readyState==4){
                      if(headType=="All")
                         span.innerHTML=xmlHttp.getAllResponseHeaders();
                      else{
                          span.innerHTML=headType+": "+xmlHttp.getResponseHeader(headType);
                      }
                 }
             }
          </script>          
</head>
<body>
<center>
<input type="button" onclick="HeadRequst('Content-Type')" value="Content-type"><br><br>
<input type="button" onclick="HeadRequst('Date')" value="Date"><br><br>
<input type="button" onclick="HeadRequst('Connection')" value="Connection"><br><br>
<input type="button" onclick="HeadRequst('All')" value="All headers"><br>
<br><br><br>
<span id="state"></span><br>
</center>
<body>
</html>

 

<ps:这个例子在IE下工作很顺利,在FF下死活出不来,MS原因是FF不支持ActiveX>

 

JSON

JSON的全称是:javascript object notation 对象标志。它是一种轻量级的基于文本并且和语言无关的数据交换格式。和XML类似,是一种文本组织格式,具体是这样的,比如我们有一组数据,用xml的话:

<user>

   <name>Dumpling</name>  <gender>Famle</gender><age>22<age>

<user>

那么如果用JSON的格式,就是:

"user":[{"name":"Dumpling", "gender":"Famle", "age":22}]

优点就是它可以简化获取的数据的解析和存储等工作。

如果上面的例子再写复杂一点,就可以看到JSON的具体格式了,我们在JS中声明的时候,就可以这么写:

 

var users={

    "users":[

        {"name":"Dumpling", "gender":"Famle", "age":22},

        {"name":"Sanday", "gender":"Famle", "age":20},

        {"name":"Shine", "gender":"Famle", "age":18}

]};

使用JSON封装数据,用到的是JSON.stringify(obj)的方法。obj自己封装一个类就可以。

 

 

不需要我们自己来写字符串,只要给值,然后用函数封装就可以了。

来个简单的例子:

 

<html>
  <head>
    <meta name="generator"
    content="HTML Tidy for HTML5 (experimental) for Windows https://github.com/w3c/tidy-html5/tree/c63cc39" />
    <title>testing</title>
    <script language="javascript">
		function user(name,age,gender){
			this.userName=name;
			this.userAge=age;
			this.userGender=gender;
		}
		function submidForm(){
			var subForm=document.jsonForm;
			var userTable=document.getElementById(&quot;users&quot;);
			var newRow=userTable.insertRow(-1);// insert one row at the end of table
			newRow.insertCell(0).innerHTML=subForm.name.value;
			newRow.insertCell(1).innerHTML=subForm.gender.value;
			newRow.insertCell(2).innerHTML=subForm.age.value;
			var newuser=new user(subForm.name.value,subForm.age.value,subForm.gender.value);
			var jsonStr=JSON.stringify(newuser);
			alert(jsonStr);
			subForm.name.value=&quot;&quot;;
			subForm.age.value=&quot;&quot;;            
		}
</script>
	</head>
	<body>
    <center>
		<form method="post" action="#" name="jsonForm">
        <table border="1" id="newuser">
			<tr>
				<td>Name:</td>
				<td>
					<input type="text" name="name" />
				</td>
				<td>Gender:</td>
				<td>
					<select name="gender">
						<option value="Famle">Famle</option>
						<option value="Male">Male</option>
					</select>
				</td>
				<td>Age:</td>
				<td>
					<input type="text" name="age" />
				</td>
			</tr>
			<tr>
				<td colspan="6" align="center">
					<input type="button" id="submit" value="Submit" onclick="submidForm()" />
				</td>
			</tr>
        </table>
		</form>
		<table id="users" border="1" width="450">
        <tr>
          <td>Name</td>
          <td>Gender</td>
          <td>Age</td>
        </tr>
		</table>
    </center>
	</body>
</html>

 

 

 

 

 

害怕太长我就遮起来了,反正结果是这样子滴:

当然,如果要一次封装很多,比如提交了5 6个用户然后一次封装成JSON格式,可以把这几个放到一个Arry里,然后把arry作为stringify的参数就可以,自己试一下吧~我就不上代码了~

 

在JS中对JSON解析和赋值

 

这一块就算是json的中心了,对他的解析其实很简单的,比如还是之前的例子,

var usersJson={
"users":[
{"name":"Dumpling", "gender":"Famle", "age":22},
{"name":"Sanday", "gender":"Famle", "age":20},
{"name":"Shine", "gender":"Famle", "age":18}
],
"objects":[
{"name":"food","price":55}
]
};

 

 

那么我要得到sanday这个值,就可以这么写:var  username=uersJson.users[1].name; 会了这一个,别的也没问题了吧~

 

如果要修改数据,那么就是直接赋值,比如我要修改那个食物的价格 userJson.objects[0].price=43;

 

至于判断输入是否合法之类的,我就懒得写了,费时间。

 

JSON就到这里,接下来最后一部分了。


 

Prototype框架

 

 先上一下prototype的网站:http://www.prototypejs.org/

 

它其实就是对JS做了大量的拓展,大体由通用方法与模板两部分构成的。通用方法比如说$()  $$()  $A()等,模板则是对JS内部类进行拓展,并提供对Ajax的各种应用的支持模板。具体大家可以上给出的网站看看。举俩例子,再多请到API页面查看:http://api.prototypejs.org/  (是啊 我很懒的╮(╯▽╰)╭)

 

$()方法:获取元素对象,类似于getElementById方法,并且可以接受多个参数,返回一个数组。

 

$$()方法:获取指定元素数组,类似与getElementByTagName()方法,根据标签名获取对象。

 

Ajax对象:刚才我们也说过了,因为浏览器不同,我们需要写大量的判断代码,于是prototype就给我们代劳了,Ajax.Request对 象封装了创建XMLHttpRequest对象的代码,以及各种处理服务器返回信息的常用方法,所以还是很好用的。想要深入学习的话,请继续参考上面的 API链接 (= =!)

 

form对象:因为真的很常用,于是form也是prototype重点关注的对象,这部分 很重要,于是可以参考API的相关部分。。。。。。

 

转自:http://www.cnblogs.com/jiaozihardworking/archive/2012/03/13/2384024.html

分享到:
评论

相关推荐

    javascript 进阶篇3 Ajax 、JSON、 Prototype介绍

    Prototype通常指的是JavaScript的一个库,它用于简化那些经常使用的JavaScript编程模式,包括Ajax交互。Prototype库封装了许多方便的函数,简化了DOM操作,事件处理,以及Ajax请求的实现。通过使用Prototype,开发者...

    prototype笔记(9)----结合Prototype和JSON开发AJAX

    在本篇"prototype笔记(9)----结合Prototype和JSON开发AJAX"中,我们将深入探讨如何利用Prototype JavaScript库与JSON(JavaScript Object Notation)技术来高效地开发异步JavaScript应用程序,也就是我们常说的AJAX...

    javascript框架(json.jQuery.prototype).rar

    在给定的标题“javascript框架(json.jQuery.prototype).rar”中,我们可以推测这是一个关于JavaScript框架,特别是jQuery框架的教程或者参考资料。jQuery是广泛使用的JavaScript库,它简化了JavaScript的许多方面,...

    [JavaScript进阶]Professional JavaScript for Web Developers(3rd)

    《JavaScript进阶》是Nicholas C. Zakas所著的JavaScript领域的专业书籍,是《Professional JavaScript for Web Developers》第三版的中文翻译版。这本书旨在帮助读者深入理解JavaScript编程语言,从基础到高级特性...

    经典ajax.prototype.javascript实例

    `prototype`是JavaScript的一个库,它为JavaScript语言添加了许多实用的功能,其中包括对Ajax操作的强大支持。本实例将探讨如何使用Prototype库中的Ajax功能进行编程。 首先,我们需要理解Prototype库是如何引入到...

    Ajax + JSON + Servlet + prototype.js(实现的一个Ajax实例)

    在这个Ajax实例中,前端使用Prototype.js发起Ajax请求,向服务器发送JSON数据,或者接收服务器返回的JSON数据。由于JSON是JavaScript的一部分,因此在JavaScript中解析JSON数据非常直观,这使得前后端之间的数据交换...

    ajax 框架 prototype1.6 中文版 天涯浪子

    Prototype 1.6 是一个流行的JavaScript库,专为简化AJAX(异步JavaScript和XML)开发而设计。这个中文版的框架旨在帮助中国开发者更好地理解和使用Prototype的功能,从而提高Web应用的交互性和用户体验。Prototype的...

    Ajax toolkit prototype PPT

    尽管其名称中包含XML,但在现代Web开发中,JSON(JavaScript Object Notation)已经逐渐取代XML成为Ajax传输数据的主要格式,因为JSON更轻量级且易于解析。Ajax的核心在于通过JavaScript实现页面的异步更新,无需...

    json.js,json2.js,json.jar,prototype.js,prototype.chm

    其中,JSON支持是Prototype库的一部分,它允许开发者轻松地进行JSON数据的处理,与json.js和json2.js类似,但它是作为更全面的JavaScript工具集的一部分。 5. prototype.chm:CHM是Microsoft的 Compiled HTML Help ...

    PHP+AJAX+PROTOTYPE国省市三级联动菜单原型

    3. Prototype:Prototype是一个JavaScript库,它简化了DOM操作,提供了许多实用的函数,使得在JavaScript中进行Ajax请求和动态页面更新变得更加简单。在这个项目中,Prototype可能用于创建AJAX请求对象,监听DOM事件...

    Ajax(Ajax,jquery,prototype综合).rar

    5. **jQuery和Prototype**:这两个是JavaScript库,它们简化了Ajax的使用。jQuery提供了`.ajax()`、`.get()`、`.post()`等方法,Prototype有`Ajax.Request`和`Ajax.Updater`等,它们都封装了底层的XMLHttpRequest...

    json+prototype+nav 的js文件包

    Prototype.js 是一个广泛使用的JavaScript框架,它扩展了JavaScript的基本对象和类,提供了更方便的DOM操作、事件处理和Ajax交互等功能。`prototype-1.6.0.3.js`是该框架的一个特定版本,其中包含了如Element、Array...

    prototype-ajax例子

    在JavaScript的世界里,Prototype是一个非常流行的库,它极大地简化了DOM操作,并且为Ajax通信提供了便利。本示例将探讨如何使用Prototype库进行Ajax交互,通过`AjaxServlet.java`(一个Java后端处理程序)和`ajax2....

    ajax:prototype.js很全的手册

    Prototype.js是一个JavaScript库,它为Web开发提供了丰富的功能,特别是针对Ajax交互。Ajax,即异步JavaScript和XML,是一种在不刷新整个页面的情况下更新部分网页内容的技术。Prototype.js通过简化DOM操作、事件...

    Struts 2.1-AJAX-JSON实例

    例如,`prototype.js`或`script.aculo.us`库用于创建AJAX请求,而`json2.js`可能用于在浏览器不支持JSON时提供JSON对象。 3. **Struts 2配置文件**:可能包含对AJAX插件的配置,以及Action的配置,指定哪些Action...

    javascript类库prototype.js

    7. **JSON支持**:随着JSON成为数据交换的主流格式,Prototype.js 提供了JSON的解析和序列化功能,简化了数据的处理过程。 8. **实用工具**:Prototype.js 还包含许多实用工具函数,如`$()`用于快速获取DOM元素,`$...

    json for javascript

    Prototype是JavaScript的一个开源库,它扩展了JavaScript的基本功能,包括DOM操作、AJAX交互以及对象操作等。在处理JSON时,Prototype提供了方便的方法来解析JSON字符串。 在"json for javasript"这个主题中,我们...

    jquery AJAX 回调函数取JSON成功代码

    如果你的JSON数据是一个数组,你可能需要使用`$.each()`或`Array.prototype.forEach()`来迭代数据。如果JSON数据包含嵌套的对象或数组,你需要递归处理它们。 另外,如果你的JSON数据是在本地文件系统中,如在...

    prototype.js javaScript插件

    - **JSON支持**:Prototype.js提供了`toJSON`方法,可以将JavaScript对象转换为JSON字符串,便于与服务器进行数据交换。 ### 3. Prototype.js的事件处理 - **事件委托**:Prototype.js支持事件委托,允许在一个...

Global site tag (gtag.js) - Google Analytics