2017-02-21 44 views
0

我試圖將ajax結果存儲到變量中。當我使用console.log時,它提供了我想要的html標籤,但是當我嘗試設置爲全局變量時,它說未定義。將結果ajax存儲到變量不起作用

我怎麼能AJAX結果存儲到全局變量

var result; 
 
$.ajax({ 
 
    url: "person.html", 
 
    success: function(data){ 
 
    //result=data; 
 
    console.log(data); 
 
    } 
 
}); 
 
//console.log(result);

+0

這是因爲'的console.log(結果)'會運行在'result = data'之前 – George

+1

可能存在http:// stackoverflow的重複項。com/questions/23667086 /爲什麼是我的變量未修改後我修改它在一個函數內異步 –

+0

可能重複[如何從異步調用返回響應?] (http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call) – Maxx

回答

2

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,強制它是同步的,但這通常被認爲是一個壞主意,因爲它會阻止任何其他代碼運行,直到結果返回並鎖定瀏覽器。

1

ajax請求是異步的,因此您的console.log(result)在獲得您的請求響應之前正在運行。你應該這樣做

var result;

$.ajax({ 
    url: "person.html", 
    success: callback(data) 
}); 

function callback (data){ 
    result=data; 
    console.log(result); 
} 
1

您不會看到任何數據,因爲數據尚未填充。在你的具體情況下,你實際上需要等待迴應。您可以使用以下代碼片段來實現它。

$(document).ready(function(){ 
    var data = $.parseJSON($.ajax({ 
     url: 'person.html', 
     dataType: "json", 
     async: false 
    }).responseText); 
    var myProp = data.property; // Here you can access your data items 
}); 

另一個方法應該是這樣的,你可以在一個陣列把你的數據,並可以訪問它的另一個功能是這樣的:

var result =[]; 

$(document).ready(function() 
{ 
    $.ajax({ 
    url: 'person.html', 
    async:true, 
    dataType: "json", 
    success: function(data) 
    { 
     result.push(data); 
    } 
    }); 
}); 
NewFunction() 
{ 
    console.log(result); 
} 
相關問題