jquery getJSON函数计时问题
我认为我的程序正在跳过JSON调用的结果。 是否可以在此处生成闭包函数或使程序等待JSON调用返回jquery getJSON函数计时问题,jquery,json,timing,Jquery,Json,Timing,我认为我的程序正在跳过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="
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;
}
是的,
username\u not\u duplicate
立即返回false
,因为getJSON
是异步的(即非阻塞)。returntrue
语句仅从响应处理程序返回true
。
通常情况下,您不应该执行您试图实现的阻塞调用。我想您可以考虑在全球某个地方记住请求的状态。 < P> <代码> $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;
}
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;
}
另一种选择是使用回调函数并将其传递给执行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调用结束时被调用。您希望用户名\u not \u重复函数等待getJSON调用完成吗?需要查看get\u functions.php。同时,使用firebug来监视返回的内容,以确保它是一个纯布尔值,我对此表示怀疑,尽管您使用的返回好像可以使getJSON非同步?@bob--nope。不过,对于jQuery来说,这是一个很好的添加选项。@bob
$。getJSON
只是一个等效的$。ajax
函数的简写,它允许发送同步请求。请参见第页的async
设置。所以答案是“是的,不是$.getJSON
,而是$.ajax
”对我来说,其中的一个关键部分是var rslt=false;我试图从success内部返回true/false:这不是从函数返回bool。