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