2010-11-25 20 views
0

AJAXを使用してサーバー上のファイルからJSONデータを取得するスクリプトを作成しましたが、これを関数に組み込むのに問題があります。JSONデータを取得するAJAX関数

function getJSON (file) 
    { 
     var request = AjaxRequest(); 
     var json = ""; 
     request.onreadystatechange = function() 
     { 
     if(request.readyState==4 && request.status==200) 
      { 
       json = JSON.parse(request.responseText); 
      } 
     } 
     request.open("GET", file, false); 
     request.send(); 
     return json; 
    } 

機能は、私はそれがしたいすべてを行いますが、私が原因で、ブロッキングのAJAX要求にfalseを渡ししないように言われてきた:

は、ここに私のコードです。何かがこの機能について間違っているように見えますが、私はそれをどのように変更するか分かりません。私はそれを変更する必要がありますか?もしそうなら、どうですか?

+0

jqueryを使用した場合、上記のスクリプトを1行で実行できますか?ただのヒント。 – RPM1984

答えて

6

あなたは...戻った後も長くする代わりに、あなたが受け入れる機能に渡すことができます...それはあなたのjson = JSON.parse(request.responseText)はサーバーがデータで応答後でを、たまたま意味、非同期操作ですが、このようにそれを返すことができませんこのようなデータ、:これは...

getJSON("something.json", function(data) { 
    //use data, your json object/data 
}); 

それが利用可能なとき、あなたが次の関数にそれを渡して、データを使用している。この方法:

function getJSON (file, callback) 
{ 
    var request = AjaxRequest(); 
    request.onreadystatechange = function() 
    { 
    if(request.readyState==4 && request.status==200) 
    { 
     callback(JSON.parse(request.responseText)); 
    } 
    } 
    request.open("GET", file, false); 
    request.send(); 
} 

は、その後、あなたはこのようにそれを呼び出しますアシンのやり方時代遅れの呼び出しは動作するように意図されています。

+1

ニック、この情報は私に時間の節約になりました。そのために私は感謝しています。誰かがこの男に昇給を与える。 –

関連する問題