Вернуть только true или false в JavaScript / JQuery $ .each code - PullRequest
1 голос
/ 03 мая 2011

Я работаю над кодом JavaScript / jQuery, который обнаружил пользовательский агент на основе списка указанных пользовательских агентов, полученных с помощью запроса JSON.

Как только совпадение найдено, я хочу, чтобы функция возвращала false и выходила из цикла, продолжая возвращать true, только если ни один из пользовательских агентов в документе JSON не был найден.

У меня есть этот код ...

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 ]

2 голосов
/ 03 мая 2011

Как я уже сказал в своем комментарии, вы не можете вернуть значение из вызова Ajax . Вы должны пройти обратный вызов:

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
});
0 голосов
/ 03 мая 2011

Один вариант для вашей функции 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);

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...