函数在异步Ajax回调函数完成之前完成

时间:2014-09-04 22:19:54

标签: javascript jquery ajax

我正在尝试调用单个函数“MyTopNamespace.Lvl2.BooTest()”,并让该函数返回 true false

真或假响应基于 IF 页面源中存在变量评估并设置为true或false ELSE 变量在源中不存在Ajax请求评估该响应并设置true或false。我在一个基本的命名空间代码结构中完成了所有这些。

当我调用函数并且页面源中存在变量时,输入 IF 语句,如果它通过我的评估,函数返回true或者它到达函数的末尾并返回false

这是我的问题:当我输入 ELSE 语句并进行Ajax调用时,函数结束时返回false,异步Ajax调用完成之前

我尝试了this post中提供的所有解决方案,包括回调函数和延迟承诺。但是,我一直得到错误或未定义的回报...

这是我使用回调函数解决方案的代码。但是,正如我在调用“MyTopNamespace.Lvl2.BooTest()”时所说,我只是得到 false

var MyTopNamespace;
MyTopNamespace = window.MyTopNamespace || {};
var AjaxPass;

MyTopNamespace.Lvl2 = {
    BooTestAjax: function (jsonp) {
        AJAXmeta = jsonp;
        if (typeof AJAXmeta !== 'undefined') {
            var enabledStuff = AJAXmeta.ThingTested.split(",");
            $(enabledStuff).each(function() {
                var tempRegEx = new RegExp(this);
                if (tempRegEx.test("FoundInList")) {
                    AjaxPass = true;
                }
            });
        }
    },
    BooTest: function () {
        var BooResult = false;
        if (typeof PageMeta !== 'undefined') {
            var enabledStuff = $.trim(PageMeta.ThingTested).split(",");
            $(enabledStuff).each(function() {
                var tempRegEx = new RegExp(this);
                if (tempRegEx.test("FoundInList")) {
                    BooResult = true;
                }
            });
            return BooResult;
        } else {
            $.ajax({
                url: 'http://www.myserver.com/pagemetadata?outputFormat=json',
                dataType: 'json',
                success: function(json) {
                    MyTopNamespace.Lvl2.BooTestAjax(json);
                    if (AjaxPass) {
                        BooResult = true;
                    } else {
                        BooResult = false;
                    }
                    console.log(typeof BooResult);
                    return BooResult;
                }
            });
        }
        return BooResult;
    }

    };

0 个答案:

没有答案