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