在JavaScript / JQuery $ .each代码中仅返回true或false

时间:2011-05-03 19:22:34

标签: javascript jquery ajax

我正在研究一些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的临时声明。

编辑:感谢所有人的反馈。我出于某种原因无法添加评论。

2 个答案:

答案 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);

}