一个简单的问题搞了一天,求助!!!!

renboy20 2011-08-05 04:53:36
我对注册页面进行验证,页面中用了2个函数,对用户输入的id进行判断,最后表单提交时会检查所有状代对true才提交,
第一级函数里useridpd都能正常返回true或false,但该函数里调用子函数里的callbackidpd对其数据库里是否存在验证后,想返回true或false给useridpd函数,这个问题我一直没解决,高手帮忙解决一下!!!

代码如下:

function useridpd(){
if (!Isuserid($('#userid').val())) //如果没有通过正则表达示的检查
{
$('#useridzt').html("<div class='err'><b class='xx'></b>用户名含有非法字符</div><div class='errLast'></div>");
return false;
}
else{ // 通过了正则表达示
if ($('#userid').val()=="" || $('#userid').val().length <=3) // 文本框的值为空或少于4个字节
{
$('#useridzt').html("<div class='err'><b class='xx'></b>用户名不能为空或少于4个字节</div><div class='errLast'></div>");
return false;}
else //文本框里的值为正常
{var useridtxt= $('#userid').val();
$.get("\\ajax\\useridpd.ashx?userid="+useridtxt,null,callbackidpd); //调用callbackidpd函数
}
}}

function callbackidpd(data){
if (data=="false") //如果返回的值为false表示数据库中没查到相同的
{
$('#useridzt').html("<div class='textbox_ok'><b></b></div>"); //输出OK图片
return true;
}
else{
$('#useridzt').html("<div class='err'><b class='xx'></b>用户名已被注册</div><div class='errLast'></div>"); //输出失败信息关返回false的值
return false;
}
}
...全文
259 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
renboy20 2011-08-10
  • 打赏
  • 举报
回复
非常感谢各位,

最后我想了一个笨办法,写了一个隐藏域在网页里,语句修改隐藏域里的值,最后判断值是否正确!!

madpc 2011-08-08
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 newtypebao 的回复:]

我觉得是这样的
$.get("\\ajax\\useridpd.ashx?userid="+useridtxt,null,callbackidpd); //调用callbackidpd函数
这是个异步操作
所谓异步操作,就是useridpd这个函数走到以上那句话的时候不会等待你那个callback的返回,而是直接继续走下去了,由于你那个函数后面没有语句了,因此这个函数也就运行完毕了,……
[/Quote]

跟 2 楼是一至的, 4楼在瞎喷
newtypebao 2011-08-08
  • 打赏
  • 举报
回复
我觉得是这样的
$.get("\\ajax\\useridpd.ashx?userid="+useridtxt,null,callbackidpd); //调用callbackidpd函数
这是个异步操作
所谓异步操作,就是useridpd这个函数走到以上那句话的时候不会等待你那个callback的返回,而是直接继续走下去了,由于你那个函数后面没有语句了,因此这个函数也就运行完毕了,也就是没有返回值。
而当以上那个语句真的返回了的时候,原先的useridpd函数早已经走完了,因此不会发生返回值。
我觉得单靠判断useridpd()返回的值去判断成功不成功是不行的
如果确定就是要靠useridpd这个函数去判断 那就吧那个ajax改成同步的操作 这样的话函数走到那个ajax会等待那个访问返回才会继续走下去
否则用异步的话 还是在callback里 做你如果成功或者失败的操作吧
madpc 2011-08-08
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zhang98722 的回复:]

引用 2 楼 theforever 的回复:

引用楼主 renboy20 的回复:
但该函数里调用子函数里的callbackidpd对其数据库里是否存在验证后,想返回true或false给useridpd函数
自相矛盾。这样的话,你就不应该用异步调用并设置回调函数了,而是应该采取同步读取方式,在useridpd内部读取处理后得到结果,useridpd自然就能知道它的结果了。

根据……
[/Quote]

这就是为什么有价值的回答往往得分少的原因, 一般给出具体代码的人得分高, 给出重要思想(更有价值的)的还不一定给分
renboy20 2011-08-08
  • 打赏
  • 举报
回复
[Quote=引用 1 6 楼 danica7773 的回复:]
声明一个变量isTrue,进行判断的时候,在useridpdt 和 callbackidpd 给它赋值

最后判断isTrue的值来决定是否可以提交
[/Quote]

你说的方法和6楼的是一样吧!!

我目前按照6楼的办法,但出现了一个问题,在useridpd函数里面定义了一个变量,通过回调函数去赋值,但是在useridpd函数里查到那个变量并没有值呢!
potentials 2011-08-08
  • 打赏
  • 举报
回复
学习学习
renboy20 2011-08-08
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 theforever 的回复:]
引用楼主 renboy20 的回复:
但该函数里调用子函数里的callbackidpd对其数据库里是否存在验证后,想返回true或false给useridpd函数
自相矛盾。这样的话,你就不应该用异步调用并设置回调函数了,而是应该采取同步读取方式,在useridpd内部读取处理后得到结果,useridpd自然就能知道它的结果了。

根据需求,认真画出流程图,每一步按策略决定做法,设计好再编……
[/Quote]

其实对数据库里是否存在验证后,返回的true和flase只是纯文本的,然后再用js判断的并不是bool值!
在useridpd内部用return返回的值也没返回给父级函数!
madpc 2011-08-08
  • 打赏
  • 举报
回复

function register(){
var exist=checkusername()
if(exist){
alert("用户名己存在,或检查失败");
return false;
}
}

function checkusername(name){
var ok=false;
$.ajax({
url : "checkusername.php?u="+name,
cache : false,
async : false,
type : "post",
success :function(r){
ok=(r=="true");
}
});
return ok;
}
madpc 2011-08-08
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 renboy20 的回复:]

引用 11 楼 newtypebao 的回复:
我觉得是这样的
$.get("\\ajax\\useridpd.ashx?userid="+useridtxt,null,callbackidpd); //调用callbackidpd函数
这是个异步操作
所谓异步操作,就是useridpd这个函数走到以上那句话的时候不会等待你那个callback的返回,而是直接继续走下去了,由于你那个函数……
[/Quote]

不是改同步就行了,程序写法也得改, 给你一个检查用户名的例子



function register(){
var exist=checkusername()

}

function checkusername(){
var ok=false;
$.ajax({
url : "checkusername.php",
cache : false,
async : false,
type : "post",
success :function(r){
ok=(r=="true");
}
});
return ok;
}

90后小朋友 2011-08-08
  • 打赏
  • 举报
回复
学习学习
renboy20 2011-08-08
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 newtypebao 的回复:]
我觉得是这样的
$.get("\\ajax\\useridpd.ashx?userid="+useridtxt,null,callbackidpd); //调用callbackidpd函数
这是个异步操作
所谓异步操作,就是useridpd这个函数走到以上那句话的时候不会等待你那个callback的返回,而是直接继续走下去了,由于你那个函数后面没有语句了,因此这个函数也就运行完毕了,也就是……
[/Quote]

改用同步的,还是不行!!!
打字员 2011-08-08
  • 打赏
  • 举报
回复
其实LZ的需求是个很常见的问题,

比如,现在有人要注册会员,那么会要求填写一个用户名,完成之后,首先检查用户名是否符合一定的规则(4-12的数字和字母...),如果合格则用ajax提交到服务器查询是否该用户名己存在,如果存在则不能用于注册,反之则可以。

因为ajax验证用户名是异步的,所以可能在你还没有得到结果之前,用户就点击了提交按钮,结果...

因此,交互过程可以如下:


var isTrue = false;
function checkUserName() {
var 用户名 = 表单值;
if(用户名是由4到12位的数字和字母组成的) {
ajaxCheck(用户名);
}
}
function ajaxCheck() {
if(请求发生错误或请求超时) {
isTrue = true; //以上情况,则把验证放到后台去完成(后台肯定还是要验证一次),前台直接放行
}
if(该用户名可用) {
isTrue = true;
}
}

提交表单的按钮的submit事件 = function() {
if(isTrue) {
form.submit();
} else {
alert(正在验证用户名是否可用,请等一小会会。。。)
}
}


hongmei85 2011-08-06
  • 打赏
  • 举报
回复
function useridpd(){
if (!Isuserid($('#userid').val())) //如果没有通过正则表达示的检查
{
$('#useridzt').html("<div class='err'><b class='xx'></b>用户名含有非法字符</div><div class='errLast'></div>");
return false;
}
else{ // 通过了正则表达示
if ($('#userid').val()=="" || $('#userid').val().length <=3) // 文本框的值为空或少于4个字节
{
$('#useridzt').html("<div class='err'><b class='xx'></b>用户名不能为空或少于4个字节</div><div class='errLast'></div>");
return false;}
else //文本框里的值为正常
{var useridtxt= $('#userid').val();
var isUserExists;
$.get("\\ajax\\useridpd.ashx?userid="+useridtxt,null,callbackidpd); //调用callbackidpd函数
if (!isUserExists) //如果返回的值为false表示数据库中没查到相同的
{
$('#useridzt').html("<div class='textbox_ok'><b></b></div>"); //输出OK图片
return true;
}
else{
$('#useridzt').html("<div class='err'><b class='xx'></b>用户名已被注册</div><div class='errLast'></div>"); //输出失败信息关返回false的值
return false;
}
}
}}

function callbackidpd(data){
if (data=="false") //如果返回的值为false表示数据库中没查到相同的
{isUserExists=false;
}
else{
isUserExists=true;
}
}
燥动的心 2011-08-06
  • 打赏
  • 举报
回复
别人勋章怎么得来,说明大部分的时候他的回答提问者是认可的。
zhang98722 2011-08-06
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 theforever 的回复:]

引用楼主 renboy20 的回复:
但该函数里调用子函数里的callbackidpd对其数据库里是否存在验证后,想返回true或false给useridpd函数
自相矛盾。这样的话,你就不应该用异步调用并设置回调函数了,而是应该采取同步读取方式,在useridpd内部读取处理后得到结果,useridpd自然就能知道它的结果了。

根据需求,认真画出流程图,每一步按策略决定做法,设计好再……
[/Quote]

早上起来就看到你N个回复了
终于明白你那些勋章怎么得来的了
分就那么重要么?
随时都摆出一副高高在上的姿态
我们都是菜鸟
但是也不一定就全部是错的
LZ的方法完全没有问题
只是少了一个步骤而已
1L基本把问题的解决方法都说出来了
你什么解决方案都没提出来
连原因都找错了...
最后还说别人如何如何...
zhang98722 2011-08-06
  • 打赏
  • 举报
回复

function checkForm()
{
if(useridpd()&&callbackidpd(data))
{return true;}
else
{return false;}
}

  • 打赏
  • 举报
回复
[Quote=引用楼主 renboy20 的回复:]
但该函数里调用子函数里的callbackidpd对其数据库里是否存在验证后,想返回true或false给useridpd函数[/Quote]
自相矛盾。这样的话,你就不应该用异步调用并设置回调函数了,而是应该采取同步读取方式,在useridpd内部读取处理后得到结果,useridpd自然就能知道它的结果了。

根据需求,认真画出流程图,每一步按策略决定做法,设计好再编码,就能避免这样草率的现象了。
打字员 2011-08-05
  • 打赏
  • 举报
回复
声明一个变量isTrue,进行判断的时候,在useridpdt 和 callbackidpd 给它赋值

最后判断isTrue的值来决定是否可以提交

87,907

社区成员

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

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