javascript ajax在浏览器控制台中返回值“被盗”

时间:2013-10-30 08:41:02

标签: javascript jquery ajax browser

我有以下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调用是同步的,为什么第一次没有返回值?

1 个答案:

答案 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"