2012-04-04 9 views
0

javascriptで私は変数で応答を収集して印刷しようとしています。変数undefindを出力し、応答を出力します。最初にservicedata = undefined を印刷し、サーバーから取得した応答を出力します。javascriptでのスレッドの使用方法

var data = get(requiredUrl); 
console.log('servicedata ='+jsonstr); 

私は応答を待っておらず、その下の文章を実行していると思います。そのためにはスレッドを使用する必要があります。どうすればjavascriptでこれを行うことができますか?

function get(partenerUrl) { 
    var xhr = new XMLHttpRequest(); 
    xhr.open('GET', partenerUrl, true); 

    xhr.send(null); 
    xhr.onreadystatechange = function() { 
     console.log('in onreadystatechange:' + xhr.readyState + 'status' 
       + xhr.status); 

     if (xhr.readyState == 4 && xhr.status == 200) { 
      var arrayOfObjects = eval(xhr.responseText); 
      var jsonstr = JSON.stringify(arrayOfObjects) 
      console.log('response>>' + jsonstr); 
      return jsonstr; 
     } 
     return NETWORK_CONNECTION_NOT_FOUND; 
    } 

} 
+3

"これはスレッドを使用する必要があります"いいえ、あなたはしません。 – NullUserException

+0

AJAXを使用する必要があります。 Ajax!==スレッド。 – Panagiotis

+0

@Panagiotis:AJAX =非同期... =同時=スレッドの形式(緑のスレッド、それを入れたい場合) –

答えて

0

ここにはいくつかの問題があります。変数jsonstrget関数内で宣言されているため、console.log('servicedata ='+jsonstr);呼び出しでもアクセスできません。

しかし、あなたが正しいので、それはうまくいかず、呼び出しは非同期であり、そのような行はすぐに実行されます。 get機能の中でconsole.logに電話する必要があります。あなたはすでにconsole.log('response>>' + jsonstr);としています。だから本当に問題が何かを見ていないのですか?

PS - これはスレッドとは関係ありません。

0

2つのことは、まずあなたが

console.log('servicedata ='+jsonstr); 

の代わりに、また

console.log('servicedata =' + data); 

、あなたがここにAA(非同期など)JAXクエリ

xhr.open('GET', partenerUrl, true /* The `true` here mean asynchronous`*/); 

だから、スクリプトがする作るのですか続行するためにxhr.onreadystatechangeコールバックを待つことなく、getメソッドはあなたに何も送ることはありません。実際のデータを取得したい場合は、xhr.onreadystatechangeコールバックの中でそれを行う必要があります(または悪い選択です)。非同期パラメータをfalseに設定しますが、最終的にアプリケーションを少しフリーズします。

関連する問題