jquery getJSON函数计时问题
我认为我的程序正在跳过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; }
$.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调用结束时调用。
Yeap, username_not_duplicate
只是立即返回false
,因为getJSON
是异步的(即非阻塞)。 return true
语句只从响应处理程序返回true
。 通常情况下,您不应该进行这样的阻止调用。 我想你可以考虑在全球范围内记住请求的状态。