Ajax 之应用

Asynchronous JavaScript and XML
 
Ajax   HTML JavaScript™  技术、 DHTML  DOM 组成
Ajax 关键是一个称为 XMLHttpRequest JavaScript 对象 , 能够用来发送 HTTP 请求 , 接收应答 ,
并将其解析为 XML.
XMLHttpRequest的方法和属性如下:
         open() :建立到服务器的新请求
         send() :向服务器发送请求
                    用法: xhr.open (" GET ","url? 参数 =xxx& 参数 =xxx");       send ( null );
                             xhr.open ("OPEN",url);                                              send ( 数据 );
         abort() :退出当前请求
 
         onreadystatechange :允许指定一个回调函数,必须在 send() 之前设置
         readyState HTML 就绪状态。属性值如下 :
                            0 :请求没有发出(在调用  open()  之前)
                            1 :请求已经建立但还没有发出(调用  send()  之前)
                            2 :请求已经发出正在处理之中
                            3 :请求已经处理,响应中通常有部分数据可用,但是服务器还没有完成响应
                            4 :响应已完成,可以访问服务器响应并使用它
         status HTTP  状态代码。部分属性值如下:
                            200 :表示  OK
                            401 :未经授权  ( 如果脚本需要认证,而请求却没有提供有效的证书 ,
会返回 401 403 的错误代码 )
                            403 :禁止
                            404 :请求的 URL 不存在
                            301 :永久移动
                            302 :找到(请求被重新定向到另外一个  URL/URI  上)
                            305 :使用代理(请求必须使用一个代理来访问所请求的资源)
         responseText     服务器返回的请求响应文本
         responseXML 值以 XML 方式返回 , 可解析为一个 DOM 对象
 
HTML
PostCode <input οnblur="getZipData(this.value)" type="text" name="zip"> //onblur: 失去焦点时执行
Javascript
var xhr=null;
function CreateXMLHttp(){
// 尝试以 IE 方式创建该对象
         try{ xhr= new ActiveXObject("Msxml2.XMLHTTP"); }
         catch (e){ try { xhr= new ActiveXObject("Microsoft.XMLHTTP"); }catch (e2) {xhr = null; }}
// 如果仍然没有建立 xmlHttp ,则以非 Microsoft  的方式创建该对象
         if ( xhr==null && typeof XMLHttpRequest != 'undefined') { xhr= new XMLHttpRequest(); }
}
 
function   getZipData ( zipCode ) {
CreateXMLHttp();       // 每次使用前,都要先创建一个 XMLHttpRequest 实例
         if(xhr==null) return;
         xhr.onreadystatechange= processZipData;  // 状态改变时触发
         xhr.open(" GET ","abc.aspx?zipcode="+ zipCode);
         xhr.send(null);      // 最后 , 调用 send() 将请求发送到服务器
}
 
function processZipData ( ) {                  // 解析应答的回调函数  (TEXT)
         if(xhr.readyState ==4) {
                   if(xhr.status==200){
                            // 以字符串方式返回
                             var rtdata=xhr.responseText;   // 如果有多个值,则以逗号分隔
                            var v=rtdata.split(',') ;  // 转换成数组 v ,取值方式  v[0] …
                             // XML 格式返回
var xmlDoc =xhr.responseXML.documentElement;
              或: var xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.loadXML(xhr.responseText);
xmlDoc...childNodes[0].nodeValue; 相关操作参考 XML
                   }
         }
}

 

Web.Config  设置 <globalization requestEncoding="UTF-8"  responseEncoding="UTF-8" />
可以支持繁简体中文同时显示
 
前台以 XML 格式将参数 POST 到后台 (Javascript)
var XmlStr="<?xml version='1.0' encoding='UTF-8'?><REC>…. 采用 UTF-8 编码 ….</REC>";
xhr.open("POST",URL);
xhr.send( XmlStr );
 
后台接收 XML (C#)
using System.Xml;
XmlDocument XmlDoc;
if(Request.InputStream.Length>0){
XmlDoc=new XmlDocument();
try{   XmlDoc.Load(Request.InputStream); }    // 直接接收 XML
catch{                   // 不成功则先将输入流编码成字符串,再接收
System.IO.Stream stream = Request.InputStream;
byte[] buffer = new byte[stream.Length];
stream.Read(buffer,0,buffer.Length);
string szXML = System.Text.UnicodeEncoding.Default.GetString(buffer,0,buffer.Length);
XmlDoc.LoadXml(szXML);
}
if (XmlDoc.GetElementsByTagName("ID").Count>0 )
         sid=XmlDoc.GetElementsByTagName("ID")[0].ChildNodes[0].Value;
}
 
后台传送 XML 到前台:
String XmlStr=” <?xml version='1.0' encoding='UTF-8'?><REC>... 同样以 UTF-8 编码记录内容 ...</REC>";
Response.ContentType="text/xml";
Response.Write (XmlStr);
Response.End();
 
前台以字符串将参数 GET 到后台  (Javascript)
// encodeURI ( )                      返回有效的统一资源标识符的字符串,但不对  : / ; ?  等字符进行编码
// encodeURIComponent ( )   对所有字符进行编码,包括含有 HTML 标记的字符串
// escape ( )                                       返回 Unicode 格式的字符串,所有空格,标点及任何非 ASCII 字符
都用 %xx 编码替换,但不能对 URI 进行编码
var szURL="xxx.aspx?ttype=A&tname=" + escape(" 繁简体中文字符 ") + "&rndnum=" + Math.random();
xhr.open(" GET ", szURL);
xhr.send(null);
 
后台接收 (C#)
string ttype=Request["ttype"];
string tname= HttpUtility.UrlDecode(Request["tname"]);     // 对中文进行解码
 
使用AjaxPro.dll  (不同版本有些不同)
1 .引用 using AjaxPro;
2 .在 Web.Config 文件中 </system.web> 的前面加上
         <httpHandlers>
<add verb="POST, GET " path="ajaxpro/*.ashx" type="AjaxPro.AjaxHandlerFactory, AjaxPro"/>
</httpHandlers>
3 .在 aspx.cs 文件,类定义的上一行加上 [ AjaxPro.AjaxNamespace (" 当前类名 ")]
    在定义的方法的上一行加上 [AjaxPro.AjaxMethod]  表示该方法是 Ajax 方法。
4 .在当前 aspx 文件的 Page_Load ( ) 方法内加上:
AjaxPro.Utility.RegisterTypeForAjax(typeof( 定义 Ajax 方法所在的类名 ));
5 .前台的 form 必须是 runat=server
6 .在前台 Javascript 中使用 Ajax .Ajax 方法 ( 参数 回调函数名称 执行后台的 Ajax 方法
      function  回调函数 (result) { var  返回值 =result.value; }
如果返回值是 XML 字符串,则用
var xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.loadXML(result.value);
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值