7

我认为我的程序正在跳过 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;
}
4

4 回答 4

13

$.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;
}
于 2010-08-05T21:03:42.330 回答
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 + "&parameters=" + parameters;
   var rslt = false; 
   $.ajax({ 
         async: false, 
         url: url, 
         dataType: "json", 
         success: function(data) {
           if (data == true) {                   
             rslt = true; 
           }
        }, 
    });
    return rslt; 
}
于 2010-08-06T03:29:52.640 回答
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 调用结束时被调用。

于 2014-01-28T16:47:04.547 回答
1

是的,username_not_duplicate只是false立即返回,因为getJSON它是异步的(即非阻塞)。该return true语句仅从true响应处理程序返回。通常,您不应该执行您想要实现的阻塞调用。我想您可以考虑在全球某处记住请求的状态。

于 2010-08-05T21:01:16.000 回答