0

为什么这不起作用?

var names;

$.ajax({
     type : 'POST',
     url : postUrl+"/admin/returnUserJSON",
     success : function(data){
          names = data;
     }
});

console.log(names);

问题: Console.log 返回未定义。

4

4 回答 4

6

由于$.ajaxcall 是异步的,console.log将在line 执行之前 调用(因为它是回调函数的一部分,只有在服务器响应后才会调用)。因此它将输出.names=data$.ajaxundefined

您可以通过两种方式修复它:将输出移动到回调函数中......

function(data){
  names = data;
  console.log(names);
}

...或使用 Promise 接口:

$.ajax({
     type : 'POST',
     url : postUrl+"/admin/returnUserJSON",
     success : function(data){
          names = data;
     }
}).then(function() { console.log(names); });
于 2012-10-22T23:04:03.913 回答
2

您需要将您的 console.log 移动到success处理程序中。

 success : function(data){
      names = data;
      console.log(names);
 }
于 2012-10-22T23:04:41.430 回答
2

您的 AJAX 请求在执行时尚未完成触发console.log

如果将 移动console.logsuccess回调,您将正确获取数据。

var names;

$.ajax({
     type : 'POST',
     url : postUrl+"/admin/returnUserJSON",
     success : function(data){
          names = data;
          console.log(names);
     } 
});

我建议阅读异步 javascript 编程

于 2012-10-22T23:05:21.497 回答
1

AJAX 请求在页面加载后触发,这就是您收到错误的原因。当您将变量打印到控制台时,该变量不存在。

于 2013-01-21T03:21:47.600 回答