我认为我的程序正在跳过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;
}
答案 0 :(得分:12)
$.getJSON()
API调用是异步的。您可以通过$.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;
}
答案 1 :(得分:3)
Drew的答案几乎是完美的,只缺少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;
}
答案 2 :(得分:3)
另一种选择是使用回调函数并将其传递给执行getJSON的函数:
//this is the function that executes my getJSON
//callback is the name of my callback function
function getMyData( callback ){
//here you do your getJSON call
$.getJSON(url, function(items){
//do your stuff here
//call your function here (at the end)
callback();
});
}
这样你的回调函数将在getJSON调用结束时调用。
答案 3 :(得分:1)
Yeap,username_not_duplicate
只是立即返回false
,因为getJSON
是异步的(即非阻塞)。 return true
语句只返回响应处理程序中的true
。
通常情况下,您不应该尝试实现这样的阻止呼叫。我想你可以考虑在全球范围内记住请求的状态。