0

我的功能有问题。

有:

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 '',一切正常,但如果 value != '',windows.location 在 set_session 完成之前启动。设置会话警报“错误”:(

提前感谢您的帮助。

4

2 回答 2

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;
    }
}

我也对您的代码进行了一些调整。哦,顺便说一句,“发送”的过去分词是“发送”,而不是“发送”。

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

于 2013-10-30T16:48:16.790 回答
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";
}

是的,它是“发送”而不是“发送”。

于 2013-10-30T16:51:16.577 回答