使用JQuery $ .post验证

时间:2015-05-12 20:51:22

标签: javascript jquery ajax validation

我有一个关于异步调用的问题。我尝试做的是验证一个给定的"代码"已验证。刷新页面不是一种选择。

案例简而言之:
我需要根据服务器的回复将变量设置为true或false 该调用是通过使用ajax完成的 ajax($ .post)请求处理来自服务器的回复,从而将变量设置为true或false 然后,变量的值将用作该函数的返回值,true或false。
问题是仅在ajax完成后返回。 ajax的异步行为可以防止这种情况,并且不会挂起浏览器。

验证是通过使用函数完成的(它将在if中使用。)

if看起来如下:

if(codeGiven()) {
    // Code ok. Continue to process
} else { msgCodeInvalid(); }

函数codeGiven如下

function codeGiven(toChk) {
    var codeOK = false; // default answer
    if(toChk) { // only perform call if toChk is not "" of undefined
        $.post(
            "validate.aspx", // server script
            { code: toChk }, // value
            function(data) { // function
                if(data == "true") {
                    codeOK = true; // when true => return will be true
                } else {
                    codeOK = false; // when false => return will be false
                }
            }
        );
    }
    return codeOK; // will be false by default but true when the code is OK
}

aspx将使用已发布的"代码"并将其与我数据库中的其他代码进行匹配。如果找到匹配,则回复将为" true"。如果没有,答复将是" false"。

因为ajax调用($ .post)是异步的,所以结果将始终为false。

关于如何破解我的方法的任何建议,除了我的想法与setInterval(我知道一个脏方法)?帖子里面的回归都没有用。

有什么想法吗?

提前致谢

最终解决方案

我意识到我可以将整个逻辑放在$ .post中。

基本上,我的逻辑是以下(警告,它是一个深层树结构):

if(myvar) { // if pid not empty
    $.post( // start validation
        "validator.aspx", // server side validation script
        { code : myvar }, // data to be passed to the server
        function(data, status) { // execute when post happend
            if(data == "true") { // if answer from server == "true"
                /*
                assign variables
                apply other logic
                process effects
                ...
                */
            } else { /* if answer from server == "false" => error: invalid code given */ }
        }
    ).error( /* error: validator did a boom boom. We're sorry :( */ );
} else { /* error: please enter a code */ }

2 个答案:

答案 0 :(得分:0)

请检查您的功能的回调或承诺,例如:

function checkCodeGiven(toChk) {
    return $.post("validate.aspx", { code: toChk });
}

然后像:

checkCodeGiven(someVar).then(function(data) {
    if(data == "true") {
        // do whatever you wanted to do for true
    } else {
        // do whatever you wanted to do for false
    }
});

答案 1 :(得分:-1)

你可以: 。在ajax的成功功能中调用你想要的功能 或
。延迟方式:多次调用你需要if(codeGiven)的部分,延迟时间约为100ms,这样你就可以确定它是假的,或者在一次调用时变为真,替换这部分

if(codeGiven()) {
// Code ok. Continue to process
} else { msgCodeInvalid(); }

使用codeGiven();Delayer(0);并声明此

function Delayer(counter) {
        if (codeOK) {
            // Code ok. Continue to process
        } else if (counter <10) { //not sure if it may become true later
            setTimeout(Delayer, 100, counter++);} //call after 0.1 sec
          else {
            msgCodeInvalid();    // no hope to be true
        }
    }

加上codeOK应该在全球声明 希望这对你有用 编辑刚刚澄清了一下