Javascript等待函数(jQuery)

Javascript等待函数(jQuery),javascript,jquery,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") {

我的功能有问题

有:

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_会话完成之前启动。设置会话警报“错误”:(


提前感谢您的帮助。

既然您正在重定向用户,您可以将重定向挂接到
load()
函数的
success
回调函数中。您的整个代码应该如下所示:

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”是“sent”,而不是“sended”


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

这是怎么回事?感谢@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";
}

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

为什么不在
load
complete
回调函数中处理它呢?你好,本,我怎么能编辑这个函数呢?我不知道,它是如何工作的。我同意。你最好的选择是执行
[…]加载([…]).complete(函数(){make();});
而不是您现在如何调用make。请告诉我您没有从客户端脚本设置服务器端会话变量。请参阅我的答案。尽管如此,@YuriyGalanter提出了一个有效的观点。如果您的站点中有一个允许操作会话变量的AJAX脚本,这可能代表一个严重的安全问题!Thnak you BenM.但是,如果我需要更多的set函数,我怎么能做到这一点呢?同样徒劳的是,只需将这两个URL参数作为变量来处理。你可能会更好地将它们作为对象传递,而不是将它们添加到字符串中。由于缺乏可读性,倾向于否决(即使作者使用两种方法也有更好的可读性)您通过添加
“return false”更改了功能
.BenM您能为更多的set\u会话编辑函数吗?当所有操作完成后,转到url吗?非常感谢!这
完成
语法有效吗?根据,
\load
返回一个jQuery对象,而不是承诺/jqXHR。除此之外,jQuery承诺将使用done/always,not complete。@numbers1311407我不知道,我从帖子上的评论中得知,假设他知道自己写了什么。你知道人们怎么说假设:-消费是生命中唯一的确定吗?开玩笑,我不得不同意你。