Я думаю, что моя программа пропускает результат вызова JSON. Действительно ли возможно сделать функцию закрытия здесь или заставить программу ожидать вызова JSON к возврату?
function username_not_duplicate(username) {
var function_name = "get_username";
var parameters = [username];
var url = "/get_functions.php?function_name=" + function_name + "¶meters=" + parameters;
$.getJSON(url, function(user_name) {
if (user_name == true) {
return true;
}
});
return false;
}
Вызов API $. GetJSON ()
является асинхронным. Вы можете сделать это синхронным, используя $. Ajax ()
следующим образом:
function username_not_duplicate(username) {
var function_name = "get_username";
var parameters = [username];
var url = "/get_functions.php?function_name=" + function_name + "¶meters=" + parameters;
var rslt = false;
$.ajax({
async: false,
url: url,
dataType: "json",
success: function(data) {
if (data == true) {
rslt = true;
}
}
});
return rslt;
}
Ответ Дрю почти идеален, только отсутствует одна скобка и запятая для IE.
function username_not_duplicate(username) {
var function_name = "get_username";
var parameters = [username];
var url = "camps/includes/get_functions.php?function_name=" + function_name + "¶meters=" + parameters;
var rslt = false;
$.ajax({
async: false,
url: url,
dataType: "json",
success: function(data) {
if (data == true) {
rslt = true;
}
},
});
return rslt;
}
Ага, username_not_duplicate
просто возвращает false
сразу, потому что getJSON
асинхронный (т.е. неблокирующий). Оператор return true
просто возвращает true
из обработчика ответа.
Обычно вам не следует делать такие блокирующие вызовы, которых вы пытаетесь достичь. Я полагаю, вы можете подумать о запоминании состояния запроса где-нибудь в глобальном масштабе.