Javascript等待函数(jQuery)

时间:2013-10-30 16:39:58

标签: javascript jquery

我的功能有问题。

有:

function set_session(session_name, hodonota) {
    var link = '/run/set_session.html?what=' + session_name + '&val=' + hodonota;
    $("#test").load(link, function (response, status, xhr) {
        if (status == "error") {
            var msg = 'Error';
            alert(msg);
        }
    });
}

我还有其他检查数据功能:

function make() {
    var error = false;
    var a = $("#val").val();

    if (a != '') {
        set_session('a', a);
    } else {
        error = true;
    }

    if (error == false) {
        window.location.href = "/sended.php";
    }
}

如果我尝试make和value if'',一切正常,但如果值!='',则windows.location在set_session完成之前启动。设置会话警报'错误':(

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

由于您正在重定向用户,因此您只需将重定向挂钩到success函数的load()回调函数即可。您的整个代码应如下所示:

function make() 
{
    var error = false,
        a = $.trim($("#val").val());

    if(a != '')
    {
        var link = '/run/set_session.html?what=a&val=' + a;
        $("#test").load(link, function (response, status, xhr) {
            if (status == "error") {
                var msg = 'Error';
                alert(msg);
            }
            else
            {
                window.location.href = '/sended.php';
            }
        });
    } 
    else 
    {
        return false;
    }
}

我也对你的代码做了一些调整。哦,顺便说一下'send'的过去分词是'发送',而不是'发送'。

请注意@YuriyGalanter提出了一个有效的观点。如果您的站点中有一个允许操作会话变量的AJAX脚本,这可能代表严重安全问题!

答案 1 :(得分:0)

这是怎么回事?感谢@ 11684 complete() - 语法。

function make() {

    var val = $("#val").val();

    if (val != '') {
        set_session('a', val, toSendPage);
    }
}

function set_session( session_name, hodonota, callback ) {

    var link = '/run/set_session.html?what=' + session_name + '&val=' + hodonota;

    $("#test").load(link, function (response, status, xhr) {

        if (status == "error") {
            var msg = 'Error';
            alert(msg);
        }

    }).complete( callback );
}

function toSentPage() {
    window.location.href = "/sended.php";
}

是的,'发送'不'发送'。