ajax异步缺少对象的问题

zhangzhao_tj 2009-03-12 09:17:49
<%@LANGUAGE="VBSCRIPT" CodePage="936"%>
<!--#include file="../Include/const.asp" -->
<!--#include file="../Connections/conn.asp" -->
<!--#include file="../Include/function.asp" -->
<!--#include file="../Include/md5.asp" -->
<%
Response.ContentType = "text/html"
Response.Charset = "gb2312"
%>
<script language="javascript" src="/js/jsfunc.js"></script>
<script language="JavaScript">
function MemLogin()
{
var ML_Name=document.MemLoginForm.ML_Name.value;
var ML_Password=document.MemLoginForm.ML_Password.value;
var CheckCode=document.MemLoginForm.CheckCode.value;

if (ML_Name.len()==0) {
alert("请输入登录帐号!");
document.MemLoginForm.ML_Name.focus();
return false;
} else {
if (isValidStr(ML_Name)) {
alert("登录帐号中含有非法字符!");
document.MemLoginForm.ML_Name.focus();
return false;
}
}
if (ML_Password.len()==0) {
alert("请输入登录密码!");
document.MemLoginForm.ML_Password.focus();
return false;
}
<%if set_LoginYzmIsOpen=1 then%>
if (CheckCode.len()==0) {
alert("请输入验证码!");
document.MemLoginForm.CheckCode.focus();
return false;
}
<%end if%>
CheckInput(ML_Name+'$'+ML_Password+'$'+CheckCode,'/Include/CheckInput.asp','会员登录','MemLoginForm');
}
</script>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<%
if CheckMemIsLogin(1,"","","","","","")=1 then
c_ML_ID=GetCookieValue(set_QtCD,"ML_ID")
c_ML_Name=GetCookieValue(set_QtCD,"ML_Name")
c_ML_LastLoginTime=GetCookieValue(set_QtCD,"ML_LastLoginTime")
c_ML_Points=GetCookieValue(set_QtCD,"ML_Points")
%>
<tr height="20">
<td width="32%" align="right">帐号:</td>
<td width="68%"><font color="#FF0000"><%=c_ML_Name%></font></td>
</tr>
<tr height="20">
<td width="32%" align="right">可用金币:</td>
<td width="68%"><%=c_ML_Points%> 个</td>
</tr>
<tr height="20">
<td width="32%" align="right">最近登录:</td>
<td width="68%"><%=c_ML_LastLoginTime%></td>
</tr>
<tr height="20">
<td align="center" colspan="2"><a href="/member/" class="z_link1">[会员中心]</a><a href="../logout.asp" class="z_link1">[注销帐号]</a></td>
</tr>
<%
else
%>
<form name="MemLoginForm" action="" method="post" onKeyPress="if(true==onEnterClick(event)) return MemLogin();">
<tr height="20">
<td width="27%" align="right">帐号:</td>
<td width="73%"><input type="text" name="ML_Name" size="15" style="border: 1px solid #CCCCCC; height: 20px; width: 120px"></td>
</tr>
<tr height="20">
<td width="27%" align="right">密码:</td>
<td width="73%"><input type="password" name="ML_Password" size="15" style="border: 1px solid #CCCCCC; height: 20px; width: 120px"></td>
</tr>
<%
if set_LoginYzmIsOpen=1 then
%>
<tr height="20">
<td width="27%" align="right">验证码:</td>
<td width="73%"><input type="text" name="CheckCode" size="15" style="border: 1px solid #CCCCCC; height: 20px; width: 60px"> <a href="javascript:refreshimg('../')" title="看不清楚,换个图片"><img id="chkcode" src="../Include/checkcode.asp" style="border: 1px solid #FFFFFF" align="absmiddle"></a></td>
</tr>
<%
end if
%>
<tr height="30">
<td colspan="2" align="center"><input type="button" value="登录" onClick="return MemLogin();"> <input type="button" value="注册" onClick="javascript: window.location='../reg.asp'"></td>
</tr>
</form>
<%
end if
%>
</table>
我把以上代码单独保存为一页,点击“登录”可以成功执行,应该也不是MemLogin()这个函数的问题。

可是,如果我把这个页用ajax异步在其它页面引用,就会报错“缺少对象”,但是我测试了一下,好像就是点击“登录”调用MemLogin()这个函数时出错。而且,我担心在异步调用时MemLogin()中会有冲突的代码,我把MemLogin()这个函数改成一个简单的alert("test"),依然报错。看来就是点击“登录”那一刹那的问题。请大伙帮忙解决一下。
<table width="201" border="0" cellspacing="0" cellpadding="0">
<tr>
<td background="/images/fenlei/bt_b4.gif" width="201" height="27" colspan="3"> <font class="z_fsize2"><b><font color="#cccccc">会员登录</font></b></font></td>
</tr>
<tr>
<td colspan="3" height="5"></td>
</tr>
<tr>
<td width="5"></td>
<td width="191" align="center" valign="top">
<div id="meminfo"></div>
<script language="JavaScript" type="text/javascript">startRequest("/IncFrm/Login_Frm.asp","meminfo");</script>
</td>
<td width="5"></td>
</tr>
<tr>
<td colspan="3" height="5"></td>
</tr>
</table>

我的异步处理代码是,这段代码我还用在读取新闻列表,运行正常,所以应该也不是异步处理代码的问题。
function startRequest(url,xsid){
xmlHttp = GetXMLHttp();
urls=url.split("?");
if (urls[1]=='' || typeof urls[1]=='undefined')
{
url=urls[0]+"?"; //test.asp?
}
else
{
url=urls[0]+"?"+urls[1]+"&"; //test.asp?test=1&
}
var n_url = url+"timestamp="+new Date().getTime();
//alert(n_url);
try{
xmlHttp.onreadystatechange = function(){handleStateChange(xsid);}
xmlHttp.open("GET", n_url, false);
xmlHttp.send(null);
}catch(exception){
alert(exception);
}
}

function handleStateChange(xsid){
document.getElementById(xsid).innerHTML = " <center>正在加载信息... </center>";
if(xmlHttp.readystate == 4){
if(xmlHttp.status == 200 || xmlHttp.status == 0){
alert(unescape(xmlHttp.responseText));
document.getElementById(xsid).innerHTML = unescape(xmlHttp.responseText);
}else{
document.getElementById(xsid).innerHTML = " <center>加载失败,请刷新重试。 </center>";
}
}
}
...全文
876 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
小纯洁001 2011-08-05
  • 打赏
  • 举报
回复
正在学习ajax异步调用顶
chinaynlmq 2011-05-14
  • 打赏
  • 举报
回复
我顶 写了 那么多的 异步
lovezx1028 2009-03-25
  • 打赏
  • 举报
回复
ding ...
zhangzhao_tj 2009-03-12
  • 打赏
  • 举报
回复
好了,我用的iframe解决啦
神仙问题搁置吧,可能异步的太多了,^_^
给分啦
Ghost_520 2009-03-12
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 zhangzhao_tj 的回复:]
引用 9 楼 Ghost_520 的回复:

关键是我觉得你这样设计有点问题吧,你用 Ajax 异步打开一个网页?

一般的做法就是首先 你的 Login_Frm.asp 打开,然后就是点击登录的时候执行 Ajax 异步验证。我想这是大多数的做法。


是啊,因为我把Login_Frm.asp嵌套到一个html页面里面啦,如果不用异步怎么弄进来呢?
点击登录的时候,我也是用的ajax执行一个动态页面,就是这块CheckInput(ML_Name+'$'+ML_Password+'$'+C…
[/Quote]

ASP 中没有嵌套页面的语句???

嵌入:
1. <!--#include file="Login_Frm.asp"-->
2. <iframe></iframe>

最好就是嵌入不要用异步的,因为打开页面只是一个同步的操作,你执行登录的时候是一个异步的,用 Ajax 才差不多。
zhangzhao_tj 2009-03-12
  • 打赏
  • 举报
回复
经过几个测试,我觉得异步调用的时候,在页面里面不能这样,只能把函数写到一个js文件中。挺纳闷的。
<script language="JavaScript">
function MemLogin()
{
alert("test");
}
</script>
Ghost_520 2009-03-12
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 zhangzhao_tj 的回复:]
引用 7 楼 Ghost_520 的回复:

可以归纳为【神仙问题】:

在 startRequest 中
alert(n_url); 看看是什么值?


这个值应该没问题,是指向Login_Frm.asp这个文件,路径也对。而且也加了时间戳。

我刚才又做了一个测试
我把MemLogin()这个函数写在了jsfunc.js里面,而不是写在Login_Frm.as这个页面中,如下
Function MemLogin(){
alert("test");
}
onclick的时候就可以成功。奇怪啊。为什…
[/Quote]

不懂,呵呵,【神仙问题】, 等待达人来解释哈。
zhangzhao_tj 2009-03-12
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 Ghost_520 的回复:]

关键是我觉得你这样设计有点问题吧,你用 Ajax 异步打开一个网页?

一般的做法就是首先 你的 Login_Frm.asp 打开,然后就是点击登录的时候执行 Ajax 异步验证。我想这是大多数的做法。
[/Quote]

是啊,因为我把Login_Frm.asp嵌套到一个html页面里面啦,如果不用异步怎么弄进来呢?
点击登录的时候,我也是用的ajax执行一个动态页面,就是这块CheckInput(ML_Name+'$'+ML_Password+'$'+CheckCode,'/Include/CheckInput.asp','会员登录','MemLoginForm');
Ghost_520 2009-03-12
  • 打赏
  • 举报
回复

关键是我觉得你这样设计有点问题吧,你用 Ajax 异步打开一个网页?

一般的做法就是首先 你的 Login_Frm.asp 打开,然后就是点击登录的时候执行 Ajax 异步验证。我想这是大多数的做法。
zhangzhao_tj 2009-03-12
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 Ghost_520 的回复:]

可以归纳为【神仙问题】:

在 startRequest 中
alert(n_url); 看看是什么值?
[/Quote]

这个值应该没问题,是指向Login_Frm.asp这个文件,路径也对。而且也加了时间戳。

我刚才又做了一个测试
我把MemLogin()这个函数写在了jsfunc.js里面,而不是写在Login_Frm.as这个页面中,如下
Function MemLogin(){
alert("test");
}
onclick的时候就可以成功。奇怪啊。为什么呢

Ghost_520 2009-03-12
  • 打赏
  • 举报
回复

可以归纳为【神仙问题】:

在 startRequest 中
alert(n_url); 看看是什么值?
zhangzhao_tj 2009-03-12
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 Ghost_520 的回复:]

你先单独运行 Login_Frm.asp 这个 asp 页面,看有没有报 “缺少对象”,也许是你的 Login_Frm.asp 这个页面某个 js 地方写的有问题 吧。
[/Quote]

你可能没明白我的意思,我就是怕MemLogin()这个函数里面某个地方写得不规范。所以我做了一个测试把MemLogin()改成如下
function MemLogin(){
alert("test");
}
即使这样,在onclick的时候,还是报错“缺少对象”
Ghost_520 2009-03-12
  • 打赏
  • 举报
回复

你先单独运行 Login_Frm.asp 这个 asp 页面,看有没有报 “缺少对象”,也许是你的 Login_Frm.asp 这个页面某个 js 地方写的有问题 吧。
zhangzhao_tj 2009-03-12
  • 打赏
  • 举报
回复
而且,我担心在异步调用时MemLogin()中会有冲突的代码,我把MemLogin()这个函数改成一个简单的,只包含alert("test")这个,依然报错。看来就是点击“登录”那一刹那的问题。请大伙帮忙解决一下。
zhangzhao_tj 2009-03-12
  • 打赏
  • 举报
回复
好的,我试试
Ghost_520 2009-03-12
  • 打赏
  • 举报
回复

在执行 MemLogin() 函数处加入一个延迟执行试试。

<td colspan="2" align="center"> <input type="button" value="登录" onClick="return login();">  <input type="button" value="注册" onClick="javascript: window.location='../reg.asp'"> </td>

function login(){
setTimeout(MemLogin(),200);
}

52,799

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 Ajax
社区管理员
  • Ajax
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧