เมื่อเร็วๆ นี้ ฉันกำลังอ่านหนังสือ <<Ajax in Action>> ฉันใช้ความรู้ในหนังสือและรวมกับ .net เพื่อเขียนบทความนี้เกี่ยวกับการใช้ .net เพื่อประมวลผล xmlHttp เพื่อส่งคำขอแบบอะซิงโครนัส
สิ่งที่เราต้องการบรรลุคือการคลิกปุ่มเพื่อรับเวลาปัจจุบันของเซิร์ฟเวอร์ html ของ aspx มีดังนี้:
HTML
<%@ ภาษาเพจ = "C#" AutoEventWireup = "true" CodeBehind = "Default.aspx.cs" สืบทอด = "Linkedu.Web.WebWWW.Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 เฉพาะกาล//EN" " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
<html xmlns=" http://www.w3.org/1999/xhtml " >
<หัว runat="เซิร์ฟเวอร์">
<title>ทดสอบ</title>
<script language="javascript" src="javascript/prototype/extras-array.js"></script>
<script language="javascript" src="javascript/xmlHttp.js"></script>
<script language="javascript" src="javascript/eventRouter.js"></script>
<script language="javascript" src="Default.js"></script>
<ภาษาสคริปต์ = "จาวาสคริปต์">
</สคริปต์>
</หัว>
<ร่างกาย>
<form id="form1" runat="server">
รับเวลาปัจจุบันของเซิร์ฟเวอร์โดยใช้วิธี Post
<input id="btnTestPost" type="button" value="โพสต์" />
รับเวลาปัจจุบันของเซิร์ฟเวอร์โดยใช้วิธีการรับ
<input id="btnTestGet" type="button" value="Get" />
<div id="divResult"></div>
</แบบฟอร์ม>
</ร่างกาย>
</html>
หากต้องการใช้จาวาสคริปต์เพื่อส่งคำขอ xmlHttp ปัญหาที่ต้องแก้ไขคือการสนับสนุนข้ามเบราว์เซอร์ เราสรุปการส่ง xmlHttp ในวัตถุ javascript และในขณะเดียวกันก็แก้ไขปัญหาการรองรับข้ามเบราว์เซอร์ในวัตถุนี้ รหัสจะเป็นดังนี้:
วัตถุ xmlHttp
-
อ็อบเจ็กต์การโหลด URL และคิวคำขอที่สร้างขึ้นด้านบน
*/
/**//* วัตถุเนมเพซ */
var net=วัตถุใหม่();
net.READY_STATE_UNINITIALIZED=0;
net.READY_STATE_LOADING=1;
net.READY_STATE_LOADED=2;
net.READY_STATE_INTERACTIVE=3;
net.READY_STATE_COMPLETE=4;
/**//*--- วัตถุตัวโหลดเนื้อหาสำหรับคำขอข้ามเบราว์เซอร์ ---*/
net.xmlHttp=function(url, onload, params, method, contentType, onerror){
นี้.req=null;
นี้.onload=onload;
this.onerror=(onerror) ? onerror : this.defaultError;
ถ้า (typeof (วิธีการ) == "ไม่ได้กำหนด" || วิธีการ == null)
-
วิธีการ = "โพสต์";
-
this.loadXMLDoc (url, พารามิเตอร์, วิธีการ, contentType);
}
net.xmlHttp.prototype.loadXMLDoc=function(url, params, method, contentType){
ถ้า (!วิธีการ){
วิธีการ = "GET";
-
ถ้า (!contentType && method=="POST"){
contentType='application/x-www-form-urlencoded';
-
ถ้า (window.XmlHttpRequest){
this.req=new XmlHttpRequest();
} อื่นถ้า (window.ActiveXObject){
this.req=new ActiveXObject("Microsoft.xmlHttp");
-
ถ้า (this.req){
พยายาม{
var loader=นี่;
นี้.req.onreadystatechange=function(){
net.xmlHttp.onReadyState.call (ตัวโหลด);
-
this.req.open(วิธีการ,url,จริง);
ถ้า (ประเภทเนื้อหา){
this.req.setRequestHeader('ประเภทเนื้อหา', contentType);
-
this.req.send (พารามิเตอร์);
} จับ (ผิดพลาด){
this.onerror.call (สิ่งนี้);
-
-
-
net.xmlHttp.onReadyState=function(){
var req=this.req;
var ready=req.readyState;
ถ้า (พร้อม==net.READY_STATE_COMPLETE){
var httpStatus=req.status;
ถ้า (httpStatus==200 || httpStatus==0){
this.onload.call (สิ่งนี้);
}อื่น{
this.onerror.call (นี้);
-
-
}
net.xmlHttp.prototype.defaultError=function(){
alert("เกิดข้อผิดพลาดในการดึงข้อมูล!"
+"nnสถานะพร้อม:"+this.req.readyState
+"nสถานะ: "+this.req.status
+"nheaders: "+this.req.getAllResponseHeaders());
-
มาเริ่มเขียนโค้ดเพื่อส่งคำขอ xmlHttp:
default.js
//วัตถุ xmlHttp สากล
var cobj;
/**//* เริ่มโพสต์*/
//Bind Post เพื่อส่งเหตุการณ์ xmlHttp ไปที่ btnTestPost
ฟังก์ชั่น loadTestPost()
-
var iobj = document.getElementById("btnTestPost");
// การเชื่อมโยงสำหรับการฟังปุ่ม btnTestPost
var clickRouter=new jsEvent.EventRouter(iobj,"onclick");
คลิกRouter.addListener(btnTestPostClick);
-
ฟังก์ชั่น btnTestPostClick()
{ // เปิด URL พารามิเตอร์, onload, พารามิเตอร์, วิธีการ, contentType, onerror
cobj = new net.xmlHttp("DefaultHandler.ashx",dealResult, "<T/>", "POST");
-
/**//* จบกระทู้*/
/**//* เริ่มได้เลย*/
//Bind Get เพื่อส่งเหตุการณ์ xmlHttp ไปที่ btnTestGet
ฟังก์ชั่น loadTestGet()
-
var iobj = document.getElementById("btnTestGet");
//ปุ่ม btnTestGet กำลังฟังการเชื่อมโยง
var clickRouter=new jsEvent.EventRouter(iobj,"onclick");
คลิกRouter.addListener(btnTestGetClick);
-
ฟังก์ชั่น btnTestGetClick()
{ // เปิด URL พารามิเตอร์, onload, พารามิเตอร์, วิธีการ, contentType, onerror
cobj = new net.xmlHttp("DefaultHandler.ashx?T=1",dealResult, null, "GET");
-
/**//* จบแล้ว*/
ฟังก์ชั่น dealResult ()
-
var dobj = document.getElementById("divResult");
dobj.innerHTML = cobj.req.responseXML.text;
-
window.onload = ฟังก์ชั่น()
-
//Bind Post เพื่อส่งเหตุการณ์ xmlHttp ไปที่ btnTestPost
โหลดTestPost();
//Bind Get เพื่อส่งเหตุการณ์ xmlHttp ไปที่ btnTestGet
โหลดTestGet();
};
สุดท้ายคือโค้ดสำหรับการประมวลผล .net xmlHttp
.net จัดการคำขอ xmlHttp
DefaultHandler ระดับสาธารณะ: IHttpHandler
-
ป้องกัน XmlDocument _xmlResult;
โมฆะสาธารณะ ProcessRequest (บริบท HttpContext)
-
ถ้า (บริบทคำขอ ["T"] != null)
// รับการทดสอบ xmlhttp
context.Response.ContentType = "ข้อความ/xml";
XmlDocument xmlDoc = XmlDocument ใหม่();
xmlDoc.LoadXml(string.Format(@"<time>GET:{0}</time>", System.DateTime.Now));
xmlDoc.Save(context.Response.OutputStream);
บริบทการตอบสนองสิ้นสุด ();
-
อื่น
// ทดสอบ POST xmlhttp
context.Response.ContentType = "ข้อความ/xml";
XmlDocument xmlDoc = XmlDocument ใหม่();
xmlDoc.Load(context.Request.InputStream);
ถ้า (xmlDoc.DocumentElement.Name == "T")
-
xmlDoc.LoadXml(string.Format(@"<เวลา>POST:{0}</time>", System.DateTime.Now));
xmlDoc.Save(context.Response.OutputStream);
บริบทการตอบสนองสิ้นสุด ();
-
-
}
บูลสาธารณะ IsReusable
-
รับ
-
กลับเท็จ;
-
-
}
http://www.cnblogs.com/laiwen/archive/2006/12/26/604050.html