2016-04-28 133 views
-1

我從AJAX源獲取數據,然後將其分配給似乎不工作的全局變量。有人可以請我指出正確的方向嗎?將Ajax數據分配給全局變量的問題

var products = []; 
    var count = 0; 
    $.ajax(
    { 
     url: 'url', 
     success: function(response) 
     { 
      prCallback(response); 

     }, 
     dataType: 'jsonp' 
    }); 
    function prCallback(response) 
    { 
     window.products = response;    
    } 
    console.log(products); 

products仍然是一個空的array,儘管分配值。

+2

在AJAX調用完成之前執行您的控制檯日誌調用 – j08691

+1

JS是**不** ** – Tushar

+0

在回調中移動console.log'; – Tushar

回答

4

您在響應返回之前記錄日誌。在回調中移動console.log。

ajax請求是異步的,這意味着在調用console.log時還沒有返回。

+1

http://stackoverflow.com/questions/16336367/what-is-the-difference-between-synchronous-and-asynchronous-programming-in-node –

+2

謝謝大家打開我的眼睛,我認爲成功意味着執行完成。 –

-2

將值賦給全局變量不是一個好主意。

但是,在console.log中,您已經在頂部聲明瞭可變產品。在回調中,您已將值賦給窗口變量「產品」 - 而不是頂部聲明的變量。

您可以刪除聲明 - 「var products = []」,您應該在console.log中看到結果。然而,以這種方式存儲它們是一個壞主意。

+0

'window.variableName'與調用變量名本身並沒有什麼不同,如果它是一個全局變量。它只是用來明確它是一個全局變量。雖然在大多數情況下全局變量可能是一個壞主意,但您的答案會誤導這個問題。 – Tricky12

+0

是的,但在上面的示例中,我們聲明瞭「var products = []」,現在產品不是窗口變量,而是整個範圍的全局變量。 – Griffi

+0

OP的問題肯定是由異步行爲引起的。如果OP的代碼位於非全局範圍內,這個答案是正確的(但是再次,這還不夠,因爲它沒有解決已知的異步問題)。 – apsillers