2012-04-04 5 views
0

Я пытаюсь запустить функцию jQuery/Javascript, которая ищет внешний файл JSON, и возвращает true, если данная переменная найдена как одно из имен пользователей JSON.JQuery/Javascript Пропуск линий?

Это то, что у меня есть: (Данная переменная player равна a)

function loggedIn(player) { 
    var result = false; 
    var liurl = "liplay.json"; 
    $.getJSON(liurl, function (json) { 
     $.each(json, function (key, value) { 
      if (value.username == player) { 
       alert(); 
       result = true; 
      } else {} 
     }); 
    }); 
    return result; 
} 

Файл Внешний JSON (liplay.json), как это:

[{"username":"a"},{"username":"q"}] 

Для некоторых Причина, код всегда возвращает false.

Я попытался запустить его один шаг за раз, и я узнал, что по какой-то причине Chrome запускает первые несколько строк кода до $.getJSON(liurl, function(json){, а затем пропускает до return result;. Я не могу сказать, почему он пропускает часть, где выполняется оператор if/else. Любые идеи о том, почему это происходит и как это исправить?

+1

Не возвращайте результат в функцию loggedIn, просто выполняйте все, что вам нужно, в обратном вызове getJSON. Это происходит потому, что он выполняется асинхронно. –

+0

Я верю, что после того, как вы получите десериализацию JSON, вы можете просто проверить массив без прокрутки через него: return json [player]! = Undefined; –

ответ

0

Вызов $ .getJSON выполняет вашу функцию в обратном вызове, поэтому вы не можете вернуть результат, так как он отжимает вызов и переходит к оператору return. Вам нужно будет реорганизовать вещи, чтобы использовать обратный вызов после завершения вызова JSON.

0

$ .getJSON - это асинхронный метод - обратный вызов функции, который вы передаете в него, - это то, что выполняется после завершения асинхронного метода , но до тех пор остальная часть основной функции продолжает выполняться и неизбежно возвращает false.

Смежные вопросы