2012-03-30 5 views
0

私は次が含まれているJSONファイルがあります: [{名:ジョー、数:4}、{名:ラルフ、数:76}]簡単に言えばJQueryを使用してJSONファイルから配列を返しますか?

を、私はその関数を作成しようとしています

function createArray(){ 
    x = $.getJSON("/names.json", function(json) { 
     var myArray = []; 
     $.each(json, function() { 
      myArray.push(json); 
     }); 
     return myArray; 
    }); 
    return x; 
} 

これは私が

+0

デバッグを試しましたか? 'var myArray ...'の前に 'alert(json);'を追加すると、オブジェクトであることがわかりますか?あるいは、おそらくエラーサーバー側がありますか? – Josh

+0

何も返さないのですか? – Joseph

+0

それはオブジェクトを返すと言い、アレイは "responseText"にあります – Elliot

答えて

0

あなたのキーと値は文字列

[{"name":"joe", "number":4},{"name":"ralph", "number":76}] 
でなければなりません意味をなさないdoesntのそれのどの部分わからないんだけど、機能していません:配列として返すこと0

この

$.each(json, function() { 
    myArray.push(json); 
}); 

は、あなたがそれを行うことはできません

$.each(json, function(key, val) { 
     if(myArray[key] == undefined) 
     {  myArray[key] = new Array(); 
     } 
     myArray[key].push(val); 
}); 
+0

私はそれを間違ってフォーマットしました - どういう意味ですか – Elliot

+0

私は配列をJSONと同じにしたいしかし、ファイルとキーの両方が必要なのではないでしょうか? – Elliot

+0

あなたはJavascriptの2次元配列を見ています –

0

になるはず、あなたの関数はpromise objectを返しますが、決してJSONレスポンスそのものます。この応答は、要求が完了した後にのみ(要求が非同期であるため、関数戻りの直後ではないではない)です。

なぜコールバックからjsonを使用しないのですか?私はこれを意味します:

function createArray(){ 
    $.getJSON("/names.json", function(json) { 
     // Whatever you need to do with your json, 
     // do it here. This code will run after 
     // createArray returns. And you can't 
     // return anything from here, it's useless. 
     // Actually, you don't even need the outer 
     // createArray function. 
    }); 
} 
2

あなたは非同期要求をしています。 $ .getJSONはあなたのコールバックの結果を返しません。

createArray関数にコールバックを渡す必要があります。また、JSONデータが既に配列の場合は、レスポンスデータを処理する必要はありません。

function createArray(cb){ 
    $.getJSON("/names.json", cb); 
} 

したがって、たとえば、あなたはこれを変更したい:この中

var myArray = createArray(); 
// Process myArray 

を:

createArray(function(myArray) { 
    // Process myArray 
}); 

問題は、あなただけのネットワーク要求の結果を割り当てることができないということです。 getJSONを呼び出すと、ネットワークリクエストが開始されますが、リクエストが開始されると、JSは他のものを実行し続けます。非同期要求の結果を取得するには、そのデータを処理して何かを行うコールバックを使用する必要があります。

+0

私は理解していません...配列を取得するにはどうすれば関数を呼び出すのですか?コールバックに入れるものは何もありません。 – Elliot

+0

そのデータを使用するロジックは、コールバック関数に入れられます。あなたがこれをどのように呼んでいるかの少しの文脈を与えるなら、私は例を挙げることができます。 – loganfsmyth

+0

配列を持つ別の関数で変数を作成したいだけです。つまり、var myArray = createArray(); – Elliot

0

「json」から得られるものは配列です。

var ar = [{ 
    "name": "joe", 
    "number": "4"}, 
{ 
    "name": "ralph", 
    "number": "76" }]; 


alert(ar[0].name);​ 

これは名前 "ジョー" を警告する、これを試してみてください。 ar[0]は配列の最初の要素です。この場合、これはプロパティーがnamenumberのオブジェクトです。通常の方法でそれらを取得/設定できます。

var myArray = []; 
    $.getJSON("/names.json", function(json) { 

      myarray=json; 
    }); 

ここでmyArrayは、オブジェクトを含む配列です。

1

loganfsmythと同じように、$ .getJSONは非同期であり、あなたが考えるものを返すことはありません(実際にはjqXHRオブジェクトを返します)。クロージャを使用して非同期性を扱うコードを記述してください:

function createArray(cb){ 
    $.getJSON("/names.json", function(json) { 
     var myArray = []; 
     $.each(json, function() { 
      myArray.push(json); 
     }); 
     cb(myArray); 
    }); 
} 

createArray(function(array) { 
    //your array is available here 
    console.log(array); 
} 
関連する問題