Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jquery getJSON函数计时问题_Jquery_Json_Timing - Fatal编程技术网

jquery getJSON函数计时问题

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 + "&parameters="

我认为我的程序正在跳过JSON调用的结果。 是否可以在此处生成闭包函数或使程序等待JSON调用返回

function username_not_duplicate(username) {
   var function_name = "get_username";
   var parameters = [username];
   var url = "/get_functions.php?function_name=" + function_name + "&parameters=" + 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 + "&parameters=" + 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 + "&parameters=" + 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。