2016-04-28 17 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には、上に宣言した変数製品があります。コールバックでは、ウィンドウ変数 "products"に値を割り当てました。上に宣言された変数ではありません。

「var products = []」という宣言を削除すると、console.logに結果が表示されます。しかし、それをこのように保存することは悪い考えです。

+0

'window.variableName'はグローバル変数であればvariableName自体を呼び出すだけではありません。単にグローバル変数であることを明示するために使用されます。ほとんどの場合、グローバル変数は悪い考えかもしれませんが、あなたの答えはこの質問に対して誤解を招きます。 – Tricky12

+0

はい、上記の例では "var products = []"という宣言をしていますが、現在はproductsはウィンドウ変数ではなく、このスコープ全体のグローバルです。 – Griffi

+0

OPの問題は確かに非同期の動作によって引き起こされます。 OPのコードが非グローバルスコープにある場合、この回答は正しいだけです(ただし、非同期の既知の問題に対処していないため、不十分です)。 – apsillers

関連する問題