<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[观夏Note]]></title> 
<link>//gm.angeldm.com/index.php</link> 
<description><![CDATA[新技术番]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[观夏Note]]></copyright>
<item>
<link>//gm.angeldm.com/post//</link>
<title><![CDATA[Ajax的post方法的使用]]></title> 
<author>果面 &lt;admin@yourname.com&gt;</author>
<category><![CDATA[网页相关]]></category>
<pubDate>Sun, 15 Nov 2009 06:22:41 +0000</pubDate> 
<guid>//gm.angeldm.com/post//</guid> 
<description>
<![CDATA[ 
	　　一些简单的基础知识，一些小小的细节，也许就决定了一个功能甚至一个软件的成败。<br/><br/> 前几天做一个小功能，用户注册时使用Ajax检验用户名是否已被注册。因为在这个小项目中，只在这里使用了Ajax，所以就不打算用以前常用的Prototype。开始时是使用get方法提交数据的，后来想想，还是换成post吧，没别的原因，因为Prototype默认是使用post方法的，所以就觉得post看上去顺眼一点。写好的Javascript代码如下：<br/><div class="code">Javascript<br/>　　var Ajax=function(option)&#123;<br/>　　　　　　var request;<br/>　　　　　　var CreateRquest=function()&#123;<br/>　　　　　　　　var httpRequest;<br/>　　　　　　　　try&#123;<br/>　　　　　　　　　　httpRequest=new ActiveXObject(&quot;Msxml2.XMLHTTP&quot;);<br/>　　　　　　　　&#125;catch(e)&#123;<br/>　　　　　　　　　　try&#123;<br/>　　　　　　　　　　　　httpRequest=new ActiveXObject(&quot;Microsoft.XMLHTTP&quot;);<br/>　　　　　　　　　　&#125;catch(e1)&#123;<br/>　　　　　　　　　　　　httpRequest=new XMLHttpRequest();<br/>　　　　　　　　　　&#125;<br/>　　　　　　　　&#125;<br/>　　　　　　　　return httpRequest;<br/>　　　　　　&#125;<br/>　　　　　　var SendRequest=function()&#123;<br/>　　　　　　　　request=CreateRquest();<br/>　　　　　　　　request.open(&quot;post&quot;,option.Url,true);<br/>　　　　　　　　<br/>　　　　　　　　request.onreadystatechange=ResponseRequest;<br/>　　　　　　　　request.send(option.Param);<br/>　　　　　　&#125;<br/>　　　　　　var ResponseRequest=function()&#123;<br/>　　　　　　　　if(request.readystate==4)&#123;<br/>　　　　　　　　　　if(request.status==200)&#123;<br/>　　　　　　　　　　　　option.Success(request);<br/>　　　　　　　　　　&#125;<br/>　　　　　　　　　　else&#123;<br/>　　　　　　　　　　　　option.Failure(request);<br/>　　　　　　　　　　&#125;<br/>　　　　　　　　&#125;<br/>　　　　　　&#125;<br/>　　　　　　SendRequest();<br/>　　　　&#125;<br/>　　　　var OnBlur=function(el)<br/>　　　　&#123;<br/>　　　　　　var option=&#123;<br/>　　　　　　　　Url:&quot;Handler.ashx&quot;,<br/>　　　　　　　　Param:&quot;text=abv&quot;,<br/>　　　　　　　　Success:function(request)&#123;<br/>　　　　　　　　　　alert(request.responseText);<br/>　　　　　　　　&#125;,<br/>　　　　　　　　Failure:function(request)&#123;<br/>　　　　　　　　　　alert(false);<br/>　　　　　　　　&#125;<br/>　　　　　　&#125;;<br/>　　　　　　new Ajax(option);<br/>　　　　&#125;</div><br/>后台代码如下：<br/><div class="code">Handler<br/>　　Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest<br/>　　　　context.Response.ContentType = &quot;text/plain&quot;<br/>　　　　context.Response.Write(context.Request.QueryString.Count)<br/>　　　　Dim text As String = context.Request.Form(&quot;text&quot;)<br/>　　　　context.Response.Write(text)<br/>　　End Sub</div><br/><br/>　　测试的时候发现，后台怎么也获取不到前台传来的数据，真是百思不得其解。翻了一下书，都是只说get不说post方法的，然后在百度上狂找资料，真是功夫不负有心人啊，终于找到了，原来要在open方法的后面加上一句话：<br/><div class="code"><br/>　　　　　　var SendRequest=function()&#123;<br/>　　　　　　　　request=CreateRquest();<br/>　　　　　　　　request.open(&quot;post&quot;,option.Url,true);<br/>　　　　　　　　<br/>　　　　　　　　request.setRequestHeader(&quot;Content-Type&quot;,&quot;application/x-www-form-urlencoded&quot;);<br/>　　　　　　　　<br/>　　　　　　　　request.onreadystatechange=ResponseRequest;<br/>　　　　　　　　request.send(option.Param);<br/>　　　　　　&#125;<br/></div><br/>　　OK，事情就这么简单的搞定了，真是踏破铁鞋无觅处，得来全不废功夫啊。<br/><br/>　　本人具体也没研究过为什么要加上这句话：<br/><div class="code"><br/>　　　　　　　　request.setRequestHeader(&quot;Content-Type&quot;,&quot;application/x-www-form-urlencoded&quot;);<br/></div>
]]>
</description>
</item><item>
<link>//gm.angeldm.com/read.php?&amp;guid=0#topreply</link>
<title><![CDATA[[评论] Ajax的post方法的使用]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>//gm.angeldm.com/read.php?&amp;guid=0#topreply</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>