一些简单的基础知识,一些小小的细节,也许就决定了一个功能甚至一个软件的成败。
前几天做一个小功能,用户注册时使用Ajax检验用户名是否已被注册。因为在这个小项目中,只在这里使用了Ajax,所以就不打算用以前常用的Prototype。开始时是使用get方法提交数据的,后来想想,还是换成post吧,没别的原因,因为Prototype默认是使用post方法的,所以就觉得post看上去顺眼一点。写好的Javascript代码如下:
后台代码如下:
测试的时候发现,后台怎么也获取不到前台传来的数据,真是百思不得其解。翻了一下书,都是只说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");
前几天做一个小功能,用户注册时使用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);
}
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
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");