Javascript jQuery AJAX回调在函数返回之前不设置变量?

Javascript jQuery AJAX回调在函数返回之前不设置变量?,javascript,jquery,Javascript,Jquery,我有一个功能: var foo=function(){ var ret="false"; var data={}; data["blah"]="blah"; $.ajax({ type: "POST", url: "https://website.com/a", data: data, dataType: "json" }).success(function (data) {

我有一个功能:

var foo=function(){
var ret="false";
var data={};
data["blah"]="blah";
  $.ajax({

          type: "POST",

          url: "https://website.com/a",

          data: data,

          dataType: "json"

      }).success(function (data) {

          ret=data["stuff"];
         alert("set to "+ret);
      }).error(function (a, b, c) {
    alert("error");
        ret="false";
      });
return ret;
}
当我执行以下操作时: 警报(foo())

我得到以下输出顺序:

1.错误

2.设置为true


我本来希望将ret设置为true,然后返回false,但事实并非如此。我做错了什么?

默认情况下,
$.ajax
是异步的。所以基本上你
返回ret之前的javascript将其设置为ajax响应


尝试在
$调用选项中使用
async:false

您不能这样做。该函数将在AJAX调用完成之前返回。它是异步的


不能从AJAX函数返回。我建议将与此AJAX调用相关的所有逻辑移到回调中。

当收到AJAX响应时,将调用
success
回调函数。根据网络往返时间的不同,这可能会延迟很多毫秒。您的
foo
函数不会等待回调完成,而是立即继续


如果要执行的操作需要AJAX调用的结果,则需要在
success
回调中执行这些操作。这可能需要您重新构造程序。

请搜索“异步回调”。这是一个非常常见的问题,如果你真的想要这种行为,当然……:)A+ 1只是为了指出它,虽然我通常认为这种方法是“非理想的”。请注意,设置<代码>异步:false < /C> >将冻结用户的浏览器,直到从服务器接收到响应。根据AJAX请求所需的时间,这可能会让用户认为他们的浏览器已经崩溃几秒钟或更长时间。我没有使用
async:false
,这是主要功能之一,没有理由让它
async:false