Ajax是异步的,这意味着代码,找出哪些结果是在同一时间运行控制台日志的结果,这就是为什么你得到未定义的原因,因为结果尚未设置的时间值被控制台记录。
我知道控制台记录结果的唯一方法是在ajax成功函数中执行它,或者让ajax成功函数调用包含控制台日志的后续函数。这是确保在控制台登录之前返回值的唯一方法。
例子:
例1:
var result;
$.ajax({
url: "person.html",
success: function(data){
result=data;
console.log(result);
//Note that in this instance using the variable 'result' is redundant, as you could simply console.log data like you're already doing.
}
});
例2:
var result;
$.ajax({
url: "person.html",
success: function(data){
result=data;
subsequentFunction(result);
}
});
function subsequentFunction(result){
console.log(result)
}
// Note that if you're doing something simple with result that this could be a bit long winded and unnecessary.
这一切都取决于你想要多少,结果是做哪种选择会会更好。
注意:还有一个名为'async'的ajax调用的属性,您可以将其设置为false,强制它是同步的,但这通常被认为是一个坏主意,因为它会阻止任何其他代码运行,直到结果返回并锁定浏览器。
这是因为'的console.log(结果)'会运行在'result = data'之前 – George
可能存在http:// stackoverflow的重复项。com/questions/23667086 /为什么是我的变量未修改后我修改它在一个函数内异步 –
可能重复[如何从异步调用返回响应?] (http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call) – Maxx