我正在尝试调用单个函数“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;
}
};