一些簡單的基礎知識,一些小小的細節,也許就決定了一個功能甚至一個軟體的成敗。
前幾天做一個小功能,使用者註冊時使用Ajax檢驗使用者名稱是否已被註冊。因為在這個小項目中,只在這裡使用了Ajax,所以就不打算用以前常用的Prototype。開始時是使用get方法提交資料的,後來想想,還是換成post吧,沒別的原因,因為Prototype預設是使用post方法的,所以就覺得post看上去順眼一點。寫好的Javascript代碼如下:
Javascript
var Ajax=function(option){
var request;
var CreateRquest=function(){
var httpRequest;
try{
httpRequest=new ActiveXObject("Msxml2.XMLHTTP");
}catch(e){
try{
httpRequest=new ActiveXObject("Microsoft.XMLHTTP");
}catch(e1){
httpRequest=new XMLHttpRequest();
}
}
return httpRequest;
}
var SendRequest=function(){
request=CreateRquest();
request.open("post",option.Url,true);
request.onreadystatechange=ResponseRequest;
request.send(option.Param);
}
var ResponseRequest=function(){
if(request.readystate==4){
if(request.status==200){
option.Success(request);
}
else{
option.Failure(request);
}
}
}
SendRequest();
}
var OnBlur=function(el)
{
var option={
Url:"Handler.ashx",
Param:"text=abv",
Success:function(request){
alert(request.responseText);
},
Failure:function(request){
alert(false);
}
};
new Ajax(option);
}
後台代碼如下:
Handler
Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
context.Response.ContentType = "text/plain"
context.Response.Write(context.Request.QueryString.Count)
Dim text As String = context.Request.Form("text")
context.Response.Write(text)
End Sub
測試的時候發現,後台怎麼也擷取不到前台傳來的資料,真是百思不得其解。翻了一下書,都是只說get不說post方法的,然後在百度上狂找資料,真是功夫不負有心人啊,終於找到了,原來要在open方法的後面加上一句話:
var SendRequest=function(){
request=CreateRquest();
request.open("post",option.Url,true);
request.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
request.onreadystatechange=ResponseRequest;
request.send(option.Param);
}
OK,事情就這麼簡單的搞定了,真是踏破鐵鞋無覓處,得來全不廢功夫啊。
本人具體也沒研究過為什麼要加上這句話:
request.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
還望大蝦們不吝賜教。