ASP.NET AJAX(一) Ajax的开始
Ajax的操作主要通过XMLHttpRequest,对于不同浏览器有不同的创建ActiveXObject的方法。其中XMLHttpRequest主要有open、send、setRequestHeader、getResponeHeader、getAllResponseHeader、abort方法和readyState、onreadystatechange、status、statusText、responseXML、的属性。
最原始的例子是这样的,html布局如下:
<body>
<form id="form1" runat="server">
<table id="credentials">
<tr><td>userName:</td><td><asp:TextBox ID="txtUserName" runat="server"></asp:TextBox></td></tr>
<tr><td>password</td><td><asp:TextBox ID="txtPassword" runat="server"></asp:TextBox></td></tr>
<tr><td></td><td><button id="btnSubmit" onclick="submitCallBack();" type="button">Submit</button></td></tr>
</table>
<table id="employeeInfo" style="display: none;">
<tr><td>Your Infomation</td></tr>
<tr><td>firstName:</td><td><span id="firstName"></span></td></tr>
<tr><td>lastName:</td><td><span id="lastName"></span></td></tr>
<tr><td>Employee ID:</td><td><span id="employeidName"></span></td></tr>
<tr><td>DepartmentName:</td><td><span id="departmentName"></span></td></tr>
</table>
</form>
</body>
主要做了一个输入用户名和密码和隐藏的经ajax调用后显示用户信息的界面,如下所示。
其javascript代码如下:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
var
request;
if
(!window.XMLHttpRequest) {
window.XMLHttpRequest =
function
window$XMLHttpRequest() {
var
progIDS = [
"Maxml2.XMLHTTP"
,
"Microsoft.XMLHTTP"
];
for
(
var
i = 0; i < progIDS.length; i++) {
try
{
var
xmlHttp =
new
ActiveXObject(progIDS[i]);
return
xmlHttp;
}
catch
(ex) { };
}
return
null
;
}
}
window.employes =
function
window$employes(firstName, lastName, employeId, departmentName) {
this
.firstName = firstName;
this
.lastName = lastName;
this
.employeId = employeId;
this
.departmentName = departmentName;
}
function
deserialize() {
var
delimeter =
"|"
;
var
responseIndex = 0;
var
delimiterIndex;
var
response = request.responseText;
delimiterIndex = response.indexOf(delimeter, responseIndex);
var
firstName = response.substring(responseIndex, delimiterIndex);
responseIndex = delimiterIndex + 1;
delimiterIndex = response.indexOf(delimeter, responseIndex);
var
lastName = response.substring(responseIndex, delimiterIndex);
responseIndex = delimiterIndex + 1;
delimiterIndex = response.indexOf(delimeter, responseIndex);
var
employeId = response.substring(responseIndex, delimiterIndex);
responseIndex = delimiterIndex + 1;
delimiterIndex = response.indexOf(delimeter, responseIndex);
var
departmentName = response.substring(responseIndex, delimiterIndex);
return
new
employes(firstName, lastName, employeId, departmentName);
}
function
readStateChangeCallback() {
if
(request.readyState == 4 && request.status == 200) {
var
credentials = document.getElementById(
"credentials"
);
credentials.style.display =
"none"
;
var
employeeInfoTable = document.getElementById(
"employeeInfo"
);
employeeInfoTable.style.display =
"block"
;
var
employee =
new
deserialize();
var
firstNameSpan = document.getElementById(
"firstName"
);
firstNameSpan.innerText = employee.firstName;
var
lastNameSpan = document.getElementById(
"lastName"
);
lastNameSpan.innerText = employee.firstName;
var
employeidNameSpan = document.getElementById(
"employeidName"
);
employeidNameSpan.innerText = employee.employeid;
var
departmentNameSpan = document.getElementById(
"departmentName"
);
departmentNameSpan.innerText = employee.departmentName;
}
}
window.credentials =
function
window$credentials(userName, password) {
this
.userName = userName;
this
.password = password;
}
function
serialize(credentials) {
var
requestBody =
""
;
requestBody +=
"txtUserName"
;
requestBody +=
"="
;
requestBody += encodeURIComponent(credentials.userName);
requestBody +=
"&"
;
requestBody +=
"txtPassword"
;
requestBody +=
"="
;
requestBody += encodeURIComponent(credentials.password);
return
requestBody;
}
function
submitCallBack() {
var
userName = document.getElementById(
"txtUserName"
);
var
password = document.getElementById(
"txtPassword"
);
var
cred =
new
credentials(userName.value, password.value);
var
body = serialize(cred);
request =
new
XMLHttpRequest();
request.open(
"POST"
, document.form1.action);
request.onreadystatechange = readStateChangeCallback;
request.setRequestHeader(
"MyCustomeHeader"
,
"true"
);
request.setRequestHeader(
'Content-Type'
,
'Application/x-www-form-urlencoded'
);
request.send(body);
}
</script>
credentials是发往服务端进行验证的对象,employes是客户端要展现的信息对象,serialize和deserialize也就是将credentials和employes处理的函数,因为采用原始的字符串形式,显得稍复杂,可以用xml格式或json格式进行简化。
1234567891011121314if
(!window.XMLHttpRequest) {
window.XMLHttpRequest =
function
window$XMLHttpRequest() {
var
progIDS = [
"Maxml2.XMLHTTP"
,
"Microsoft.XMLHTTP"
];
for
(
var
i = 0; i < progIDS.length; i++) {
try
{
var
xmlHttp =
new
ActiveXObject(progIDS[i]);
return
xmlHttp;
}
catch
(ex) { };
}
return
null
;
}
}
上面的代码也就是初始化XMLHttpRequest,根据不同的浏览器,初始化不同的对象而已。submitCallBack()也就是“确定”按钮的单击相应时间,将用户名、密码按Post格式组装好后发送HTTP请求,并设置回调函数为readStateChangeCallback,接着添加了自定义的http消息头部信息,其中"MyCustomeHeader”用于在服务端是否是异步加载,后者'Content-Type'的设置使得服务端可以用Request来访问提交的数据。回调函数readStateChangeCallback中request.readyState == 4 && request.status == 200表示异步调用成功返回,接着将http相应的值赋到给指定的位置,在设置employeeInfo为可见。
最后需要关注的是服务端代码:
12345678910111213141516void Page_Load(object sender, EventArgs e)
{
if
(Request.Headers[
"MyCustomeHeader"
] !=
null
)
{
if
(Request.Form[
"txtPassword"
] ==
"password"
&&
Request.Form[
"txtUserName"
] ==
"username"
)
{
Response.Write(
"Shahrm|Khosravi|22223333|Some Department"
);
Response.End();
}
else
{
throw
new
Exception(
"Wrong credentials"
);
}
}
}
页面加载后根据MyCustomeHeader的头部信息判断是否是异步加载,再通过Request用户名和密码信息查看是否匹配,匹配则向客户端输入employee信息,最后停止页面继续输出。最后结果如下:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述