我有以下javascript代码,我在浏览器中执行:
function run(request) {
var res;
$.ajax({
url:'http://custom-host:8080/',
type: "POST",
async: false,
data: request
}).done(function(data, textStatus, jqXHR){
console.log(textStatus);
res = data;
});
return res;
}
它只是要求我的自定义服务器获取它所获得的响应。 Chrome控制台日志如下所示:
> var a = run({command:'version'}); // executing custom function
success dev.pycached-admin/:14 // this is the console log
undefined // this is the console returned value
> a // ask for value a
"1.1" // value a (returned from ajax)
问题是:如果在之后返回实际值'1.1'(正确分配了值),控制台中是如何返回undefined的?
如果我在done函数中添加debugger
语句:
}).done(function(data, textStatus, jqXHR){
console.log(textStatus);
debugger;
res = data;
});
然后我可以看到Apple的代码可能会在脚本选项卡中维护chrome控制台(VM
文件)。无论如何,AJAX调用是同步的,为什么第一次没有返回值?
答案 0 :(得分:2)
...为什么第一次没有返回值?
确实如此,但var
是一个语句,而不是表达式,因此它无法显示控制台的结果。如果你这样做,你可以看到这个:
> var a = "foo"; undefined > a "foo"
所以就这样做:
> var a undefined > a = run({command:'version'});
......应该给你:
success dev.pycached-admin/:14 // this is the console log "1.1"