积极答复者
【AJAX】IE下利用AJAX为什么不能获取到实时变化的Session呢?

问题
-
本人想利用JS来判断实时的验证码输入是否正确然后给出提示。由于验证码是服务器端生成的,而且是无刷新更换那种。在客户端比较难以访问。所以利用AJAX来解决此问题。
但目前有一个问题,就是在FF下利用JS可以获取实时变化的Session变量,而在IE下就不行。无论验证码怎样变化却始终获取的是一开始生成的验证码。苦思冥想实在想不通问题到底出在哪里,恳请高手帮忙。
前台代码如下:
<li><b>验 证 码:</b>
<input class="newinput-2" id="validateCode" onfocus="setValidateCodeTip();" onblur="Jach();" maxlength="5" runat="server" />
<img id="getcode" runat="server" src="img.aspx" style="width: 60px; height: 20px; margin-bottom:-4px;" alt="验证码" onClick="this.src='img.aspx?r=' + Math.random()" />
<span id="showValidateInfo"></span></li></ul>
JS代码如下:
function Jach()
{
var code=CheckCode();
if($('validateCode').value!=code)
{$('showValidateInfo').className = "error";
$('showValidateInfo').innerHTML = "您的验证码不正确";
validateCodeFlag="1";
}
else
{
if(navigator.appName.indexOf("Explorer") > -1)
$('showValidateInfo').innerText = " ";
else
$('showValidateInfo').textContent = " ";
$('showValidateInfo').className = "succ";
validateCodeFlag = '0';
}alert(code);
}
//其中CheckCode()为获取实时验证码的函数代码如下:
//创建xmlHttp对象
function createXMLHTTP()
{
var xmlHttp=null;
try
{
xmlHttp=new ActiveXObject("MSXML2.XMLHTTP");
}
catch(e)
{
try
{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
catch(e2)
{
// xmlHttp=false;
}
}
if(!xmlHttp && typeof XMLHttpRequest!='undefined')
{
try
{
xmlHttp=new XMLHttpRequest();
}
catch(e)
{
// xmlHttp=false;
}
}
return xmlHttp;
}
//检测验证码
function CheckCode()
{
var objxml = createXMLHTTP();
objxml.open("GET","checkinfo.ashx",false);
objxml.send("");
var sResult=objxml.responseText;
if(objxml.status=="200")
{
return sResult;
}
}
ashx代码如下:
public void ProcessRequest (HttpContext context)
{
context.Response.ContentType = "text/plain";
context.Response.Write(context.Session["CheckCode"]);//这里我只获取了服务器的Session,然后输出到前台以备JS提取
context.Response.End();
}
public bool IsReusable {
get {
return false;
}
}
//说明:为了ashx文件能够使用Session,该文件已经继承了 IHttpHandler,IRequiresSessionState 接口
问题究竟出在哪里呢?请高手指点,小弟不胜感激。谢谢!
答案
-
本人想利用JS来判断实时的验证码输入是否正确然后给出提示。由于验证码是服务器端生成的,而且是无刷新更换那种。在客户端比较难以访问。所以利用AJAX来解决此问题。
但目前有一个问题,就是在FF下利用JS可以获取实时变化的Session变量,而在IE下就不行。无论验证码怎样变化却始终获取的是一开始生成的验证码。苦思冥想实在想不通问题到底出在哪里,恳请高手帮忙。
前台代码如下:
<li><b>验 证 码:</b>
<input class="newinput-2" id="validateCode" onfocus="setValidateCodeTip();" onblur="Jach();" maxlength="5" runat="server" />
<img id="getcode" runat="server" src="img.aspx" style="width: 60px; height: 20px; margin-bottom:-4px;" alt="验证码" onClick="this.src='img.aspx?r=' + Math.random()" />
<span id="showValidateInfo"></span></li></ul>
JS代码如下:
function Jach()
{
var code=CheckCode();
if($('validateCode').value!=code)
{$('showValidateInfo').className = "error";
$('showValidateInfo').innerHTML = "您的验证码不正确";
validateCodeFlag="1";
}
else
{
if(navigator.appName.indexOf("Explorer") > -1)
$('showValidateInfo').innerText = " ";
else
$('showValidateInfo').textContent = " ";
$('showValidateInfo').className = "succ";
validateCodeFlag = '0';
}alert(code);
}
//其中CheckCode()为获取实时验证码的函数代码如下:
//创建xmlHttp对象
function createXMLHTTP()
{
var xmlHttp=null;
try
{
xmlHttp=new ActiveXObject("MSXML2.XMLHTTP");
}
catch(e)
{
try
{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
catch(e2)
{
// xmlHttp=false;
}
}
if(!xmlHttp && typeof XMLHttpRequest!='undefined')
{
try
{
xmlHttp=new XMLHttpRequest();
}
catch(e)
{
// xmlHttp=false;
}
}
return xmlHttp;
}
//检测验证码
function CheckCode()
{
var objxml = createXMLHTTP();
objxml.open("GET","checkinfo.ashx",false);
objxml.send("");
var sResult=objxml.responseText;
if(objxml.status=="200")
{
return sResult;
}
}
ashx代码如下:
public void ProcessRequest (HttpContext context)
{
context.Response.ContentType = "text/plain";
context.Response.Write(context.Session["CheckCode"]);//这里我只获取了服务器的Session,然后输出到前台以备JS提取
context.Response.End();
}
public bool IsReusable {
get {
return false;
}
}
//说明:为了ashx文件能够使用Session,该文件已经继承了 IHttpHandler,IRequiresSessionState 接口
问题究竟出在哪里呢?请高手指点,小弟不胜感激。谢谢!
经过不断思索终于找到了问题所在;是由于open方法使用了get传参引起的。大家注意我这段代码objxml.open("GET","checkinfo.ashx",false);由于传递的checkinfo.ashx后面没有参数故不能使用get提交方式。- 已标记为答案 jinwb1982 2010年2月8日 16:17