我正在研究一些JavaScript / jQuery代码,这些代码根据通过JSON请求检索到的指定用户代理列表检测到用户代理。
一旦找到匹配项,我希望函数返回false并退出循环,只有在找不到JSON文档中的用户代理时才继续返回true。
我有这段代码......
function checkUserAgent() {
$.getJSON('noapplet-useragents.json', function(data) {
$.each(data, function(key, val) {
if(navigator.userAgent.search(new RegExp(val)) != -1) {
console.log("False!");
return false;
}
});
console.log("True!");
return true;
});
}
// ... call to checkUserAgent() function
然而,当返回false时;也返回true。 如有必要,如何使第一次返回停止该功能。
console.log()
语句只是Firebug的临时声明。
编辑:感谢所有人的反馈。我出于某种原因无法添加评论。
答案 0 :(得分:2)
正如我在评论中所说,you cannot return a value from an Ajax call。你必须通过一个回调:
function checkUserAgent(callback) {
$.getJSON('noapplet-useragents.json', function(data) {
var result = true;
$.each(data, function(key, val) {
if(navigator.userAgent.search(new RegExp(val)) != -1) {
console.log("False!");
result = false;
return false;
}
});
callback(result);
});
}
并将其命名为:
checkUserAgent(function(result) {
// so something with the result
});
答案 1 :(得分:0)
一个选项是让您的checkUserAgent
函数处理回调。这段代码可行:
var checkUserAgent = function(callback){ //callback is the function
$.getJSON('noapplet-useragents.json', function(data) {
$.each(data, function(key, val) {
if(navigator.userAgent.search(new RegExp(val)) != -1) {
console.log("False!");
callback(true);
}
});
callback(false);
}