我正在尝试将JavaScript文件在运行时嵌入到本地文件的后备功能中。并且在捕获返回值时遇到问题。
当我在两个函数之间返回值true或false时,第二个函数将其捕获为null
var script_list = new Array();
script_list.push(
['//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js', 'lib/jquery-2.1.1.min.js'], ['//maxcdn.bootstrapcdn.com/bootstrap/3.1.1/js/bootrap.min.js', 'lib/bootstrap.min.js']);
function getSrc() {
for (var i = 0; i <= urls.length - 1; i++) {
var url = window.script_list[i];
if (i === urls.length - 1) {
url = base_dir + '/' + url;
return url;
}
alert('catched value: ' + checkCdn(url)); //here catching
if (checkCdn(url) === true) {
return url;
}
}
}
function checkCdn(url) {
$.ajax({
type: "HEAD",
url: url,
crossDomain: true,
timeout: 3000,
complete: function(e) {
if (e.status === 200) {
alert('returned value: true');
return true; //here returning
} else {
alert('returned value: false');
return false; //here returning
}
}
});
}
请参阅http://plnkr.co/edit/pLqOyNg62LeUzrkrzHko以获取完整代码。
我尝试初始化局部变量,为其赋值true或false并返回变量值。但即便如此也不起作用......
现在我已经更改了代码“使用延迟对象/承诺”,因为问题here的已接受答案仍然是jQuery声明本身的错误。
function getSrc(urls) {
for (var i = 0; i <= urls.length - 1; i++) {
var url = urls[i];
if (i === urls.length - 1) {
url = base_dir + '/' + url;
return url;
}
alert('catched value: '+checkCdn(url));
if (checkCdn(url)=== true) {
return url;
break;
}
}
}
function checkCdn(url) {
return $.ajax({
type: "HEAD",
url: url,
crossDomain: true
// timeout:3000
});
}
checkCdn().done(function(r) {
if (r) {
alert ('returned value: true');
return true;
} else {
alert ('returned value: false');
return false;
}
})
.fail(function(x) {
alert ('returned value: '+x.status);
return false;
});
请参阅完整的新代码here ..