JS异步获取的回调函数如何把值传到父级中


我用的是jquery validationEngine这个插件。我需要在JS中做验证,不能在html页面上使用validate[]这种形式。


 //验证函数
_validate = function(node,rules){
    var nodeValue = $(node).val(),//input的值
        nodeId = $(node).attr('id')//input的ID
        tips = '',//提示信息
        isPass = false,//如果验证不通过,则为false
        tipStatus = '';//提示类型 pass,load,error
    for(i in rules){
        swith (i){
             case 'required':
                if(!nodeValue){
                    console.log(1);//执行顺序测试
                    isPass= false;
                    tipStatus = 'error';
                    tips += '* 此值不能为空'+'<br/>';
                }
            break;
            case 'minSize':
            ....
            break;
            case 'ajax':
                switch(rules.ajax){
                    case 'ajaxUserCall'://验证是否已注册
                        if(nodeValue && isPass){//其他验证成功的情况下才做此验证
                            $.get('./?mod=member&ac=check&op=username',
                                {
                                 elId:nodeId,
                                 elValue:nodeValue
                                },
                                function(data){
                                    console.log(1);//执行顺序测试
                                    if(data[1]){//返回成功
                                       tipStatus = 'pass';
                                    }else{
                                       tipStatus = 'error';
                                    }
                                    tips = data[2];//返回的提示信息
                                }
                            );
                        }
                    break;
                    case 'ajax...':
                    ....
                    break;
                }
            break;
        }
    }
    //
    tips = tips.substr(0,(tips.length - 5));
    if(!isPass){
        $(node).validationEngine('showPrompt',tips,tipStatus);
    return false;
    }
};

//具体验证
console.log(2);//执行顺序测试
$('#username').on('blur',function(){
 _validate('#username',{'required':'','minSize':4,'ajax':'ajaxUserCall'});
});

遇到的问提是在验证required的时候isPass,tips,tipStatus赋的值都能传递到“具体验证”的位置,在console中打印出来是正常的。

但是在ajaxUserCall验证时的赋值,就无法传递到这里。打印出来的值是在var初始化时的值。

我在required和ajaxUserCall的回调函数中分别打印console.log(1),在“具体验证”的位置打印console.log(2)。
当我做required验证时,console中显示的是1,2。但在做ajax验证的时候,console打印出的是2,1。感觉ajax的回调函数是在整个函数执行完之后才执行的,是不是这个原因我也不太清楚。想请教一下,如何解决这个问题,能正确的传值。谢谢

jquery JavaScript validationengine

……无意义 11 years, 1 month ago
LawRuru answered 11 years, 1 month ago

Your Answer