1

我在浏览器中执行了以下 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)

问题是:为什么在控制台中返回 undefined,之后返回 '1.1' 的实际值(该值被正确分配)?

如果我debugger在 done 函数中添加语句:

}).done(function(data, textStatus, jqXHR){
  console.log(textStatus);
  debugger;
  res = data;
});

然后我可以看到可能维护 chrome 控制台的 Apple 代码(VM脚本选项卡中的文件)。反正AJAX调用是同步的,为什么第一次没有返回值呢?

4

1 回答 1

2

...那为什么第一次没有返回值?

它是,但它var是一个语句,而不是一个表达式,因此它不能有结果供控制台显示。如果你这样做,你可以看到这个:

> var a = "foo";
不明确的
> 一个
“富”

所以只需这样做:

> 变种
不明确的
> a = run({command:'version'});

...这应该给你:

成功 dev.pycached-admin/:14 // 这是控制台日志
“1.1”
于 2013-10-30T08:45:46.463 回答