Baru-baru ini, saya membaca buku <<Ajax in Action>>. Saya menggunakan pengetahuan dalam buku tersebut dan dikombinasikan dengan .net untuk menulis artikel ini tentang penggunaan .net untuk memproses xmlHttp untuk mengirim permintaan asinkron.
Apa yang ingin kami capai adalah mengklik tombol untuk mendapatkan waktu server saat ini. HTML aspx adalah sebagai berikut:
HTML
<%@ Halaman Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="Linkedu.Web.WebWWW.Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transisi//EN" " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
<html xmlns=" http://www.w3.org/1999/xhtml " >
<head runat="server">
<title>Tes</title>
<skrip bahasa="javascript" src="javascript/prototype/extras-array.js"></script>
<skrip bahasa="javascript" src="javascript/xmlHttp.js"></skrip>
<skrip bahasa="javascript" src="javascript/eventRouter.js"></skrip>
<skrip bahasa="javascript" src="Default.js"></skrip>
<skrip bahasa="javascript">
</skrip>
</kepala>
<tubuh>
<form id="form1" runat="server">
Dapatkan waktu server saat ini menggunakan metode Post
<input id="btnTestPost" type="button" value="Posting" />
Dapatkan waktu server saat ini menggunakan metode Dapatkan
<input id="btnTestGet" type="button" value="Dapatkan" />
<div id="divResult"></div>
</bentuk>
</tubuh>
</html>
Untuk menggunakan javascript untuk mengirim permintaan xmlHttp, masalah yang harus diselesaikan adalah dukungan lintas browser. Kami merangkum pengiriman xmlHttp dalam objek javascript, dan pada saat yang sama memecahkan masalah dukungan lintas-browser pada objek ini. Kodenya adalah sebagai berikut:
objek xmlHttp
/**//*
objek pemuatan url dan antrian permintaan dibangun di atasnya
*/
/**//* penamaan objek */
var net=Objek baru();
net.READY_STATE_UNINITIALIZED=0;
bersih.READY_STATE_LOADING=1;
bersih.READY_STATE_LOADED=2;
bersih.READY_STATE_INTERACTIVE=3;
bersih.READY_STATE_COMPLETE=4;
/**//*--- objek pemuat konten untuk permintaan lintas browser ---*/
net.xmlHttp=function(url, onload, params, metode, contentType, onerror){
this.req=null;
ini.onload=onload;
ini.onerror=(onerror) ? onerror : ini.defaultError;
if(typeof(metode) == "tidak terdefinisi" || metode == null)
{
metode = "POSTING";
}
this.loadXMLDoc(url, params, metode, contentType);
}
net.xmlHttp.prototype.loadXMLDoc=fungsi(url, params, metode, contentType){
jika (!metode){
metode="DAPATKAN";
}
jika (!contentType && metode=="POST"){
contentType='aplikasi/x-www-form-urlencoded';
}
if (jendela.XmlHttpRequest){
this.req=XmlHttpRequest();
} else if (jendela.ActiveXObject){
this.req=new ActiveXObject("Microsoft.xmlHttp");
}
if (ini.req){
mencoba{
var pemuat=ini;
this.req.onreadystatechange=fungsi(){
net.xmlHttp.onReadyState.call(loader);
}
this.req.open(metode,url,benar);
jika (tipe konten){
this.req.setRequestHeader('Tipe Konten', Tipe Konten);
}
this.req.send(params);
}menangkap (salah){
ini.onerror.panggilan(ini);
}
}
}
net.xmlHttp.onReadyState=fungsi(){
var req=ini.req;
var ready=req.readyState;
jika (siap==net.READY_STATE_COMPLETE){
var httpStatus=req.status;
jika (httpStatus==200 || httpStatus==0){
ini.onload.panggilan(ini);
}kalau tidak{
ini.onerror.panggilan(ini);
}
}
}
net.xmlHttp.prototype.defaultError=fungsi(){
alert("kesalahan saat mengambil data!"
+"nnreadyState:"+ini.req.readyState
+"nstatus: "+ini.permintaan.status
+"nheader: "+ini.req.getAllResponseHeaders());
}
Mari mulai menulis kode untuk mengirim permintaan xmlHttp:
default.js
//Objek xmlHttp global
var cobj;
/**//* Posting dimulai*/
//Bind Post untuk mengirim acara xmlHttp ke btnTestPost
fungsi memuatTestPost()
{
var iobj = dokumen.getElementById("btnTestPost");
// Mengikat untuk mendengarkan tombol btnTestPost
var clickRouter=jsEvent.EventRouter(iobj,"onclick");
clickRouter.addListener(btnTestPostClick);
}
fungsi btnTestPostClick()
{// buka parameter url, onload, params, metode, contentType, onerror
cobj = new net.xmlHttp("DefaultHandler.ashx",dealResult, "<T/>", "POST");
}
/**//* Postingan berakhir*/
/**//* Memulai*/
//Bind Get untuk mengirim acara xmlHttp ke btnTestGet
fungsi loadTestGet()
{
var iobj = dokumen.getElementById("btnTestGet");
// pengikatan mendengarkan tombol btnTestGet
var clickRouter=jsEvent.EventRouter(iobj,"onclick");
clickRouter.addListener(btnTestGetClick);
}
fungsi btnTestGetClick()
{// buka parameter url, onload, params, metode, contentType, onerror
cobj = new net.xmlHttp("DefaultHandler.ashx?T=1",dealResult, null, "GET");
}
/**//* Selesai*/
fungsi kesepakatanHasil()
{
var dobj = document.getElementById("divResult");
dobj.innerHTML = cobj.req.responseXML.teks;
}
jendela.onload = fungsi()
{
//Bind Post untuk mengirim acara xmlHttp ke btnTestPost
loadTestPost();
//Bind Get untuk mengirim acara xmlHttp ke btnTestGet
loadTestGet();
};
Yang terakhir adalah kode untuk .net memproses xmlHttp
.net menangani permintaan xmlHttp
kelas publik DefaultHandler : IHttpHandler
{
XmlDocument terlindungi _xmlResult;
Permintaan Proses kekosongan publik (konteks HttpContext)
{
if (konteks.Permintaan["T"] != null)
{//DAPATKAN tes xmlhttp
konteks.Response.ContentType = "teks/xml";
XmlDocument xmlDoc = XmlDocument baru();
xmlDoc.LoadXml(string.Format(@"<time>GET:{0}</time>", System.DateTime.Now));
xmlDoc.Simpan(konteks.Respon.OutputStream);
konteks.Respon.End();
}
kalau tidak
{//POST tes xmlhttp
konteks.Response.ContentType = "teks/xml";
XmlDocument xmlDoc = XmlDocument baru();
xmlDoc.Load(konteks.Permintaan.InputStream);
if (xmlDoc.DocumentElement.Nama == "T")
{
xmlDoc.LoadXml(string.Format(@"<time>POST:{0}</time>", System.DateTime.Now));
xmlDoc.Simpan(konteks.Respon.OutputStream);
konteks.Respon.End();
}
}
}
bool publik Dapat Digunakan Kembali
{
mendapatkan
{
kembali salah;
}
}
}
http://www.cnblogs.com/laiwen/archive/2006/12/26/604050.html