如何获取Request.JSON返回的responseText

本文介绍了在项目中遇到的验证码验证问题,通过使用Moontools的Request.JSON实现与后台的交互。重点在于理解并解决异步请求中如何获取responseText和正确处理返回结果。通过设置async参数为false,确保请求完成后再返回结果,从而实现了验证码的正确验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最新由于项目需要,设计了一个简单的验证码功能,功能需求:在某一页面,点击某个按钮后,提示用户输入之前发到用户邮箱的验证码,如果验证成功提示验证码成功,继续执行下面代码,验证失败,提示验证码错误,让用户重新输入,大致需求如此,因项目使用的Js库是Moontools,之前并未接触或使用过该Js库,所以现场百度了解决方案,但并未看到有建设性的解决方案。下面的代码是我写的基本的提示输入框:

var value = prompt('验证码:','请在此输入验证码');  
        if(value == null){
            return;  
        }else if(value == ''){  
            alert('验证码不准为空');  
            return;
        }else{  
            var applyId = ${sealApply.sealApplyId};
           var retu = Check.tocheck(applyId,value);  
           if(retu){
               alert("验证码错误");
               return;
           }
        }

原理很简单,我再Check.js中,新建了一个tocheck的验证方法,传了两个参数到后台,具体的异步请求代码如下:

//Check.js

this.tocheck = function(applyId,checkNum){
        var url='sealApply!tocheck.jspa';
        var retu=false;
        var jsonRequest = new Request.JSON({
            url:url,
            onSuccess:function(responseJSON, responseText){
                if(responseJSON.success){
                    retu=true;                }
            },
            onFailure:function(xhr){
                alert(xhr);
            }
        }).post({"applyId":applyId,"checkNum":checkNum});
        return retu;
        
    }

因为我的想法是如果验证成功,response就返回success字段,如果验证码错误就返回failure字段,所以我再onSuccess里判断了返回的结果,因为retu默认验证失败,

所以只有验证成功才会修改验证的状态,但是由于moontools的Request.JSON也是异步请求,所以当onsuccess还执行时,tocheck的return已经返回了,未能达到我想要的结果,后来百度也未找到解决方案,我只有去看monntools的源码和文档,然后看到了Request.JSON有个参数叫async,异步同步控制参数,默认为true,异步效果,如果改为false时,js执行就同步了,只有onSuccess执行了,才会继续tocheck的其他代码,如return retu;这样我的验证结果就能被取到了,然后带回页面,responseText同理也可以被取到,存到某个变量中然后带回你的调用处,如果是json可以先解析再带回,以上是本人解决该问题的思路。贴下:

this.tocheck = function(applyId,checkNum){
        var url='sealApply!tocheck.jspa';
        var retu=false;
        var jsonRequest = new Request.JSON({
            url:url,
            async:false,//关键
            onSuccess:function(responseJSON, responseText){
                if(responseJSON.success){
                    retu=true;
                }
            },
            onFailure:function(xhr){
                alert(xhr);
            }
        }).post({"applyId":applyId,"checkNum":checkNum});
        return retu;
        
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值