2012-03-30 10 views
0

Ich habe eine JSON-Datei, die folgendes enthält: [{name: joe, Anzahl: 4}, {Name: ralph, Anzahl: 76}]Array von JSON-Datei mit JQuery zurückgeben?

Einfach gesagt, ich versuche, eine Funktion zu erstellen, als Array zurückgibt, dass:

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

Dies funktioniert nicht, ich bin nicht sicher, was er davon Teil

Sinn machen, tut sollte
+0

Haben Sie versucht, zu debuggen? Wenn Sie ein 'alert (json);' vor dem 'var myArray ...' hinzufügen, sagt es Ihnen, dass es ein Objekt ist? Oder gibt es vielleicht einen Fehler Server-Seite? – Josh

+0

gibt es überhaupt etwas zurück? – Joseph

+0

Es sagt, dass es ein Objekt zurückgibt, und das Array ist in der "responseText" – Elliot

Antwort

0

Ihre Schlüssel und Werte Strings sein

[{"name":"joe", "number":4},{"name":"ralph", "number":76}] 

und diese

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

sollte

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

Ich formatierte das falsch - so sind sie – Elliot

+0

Ich möchte das Array, das gleiche wie in der JSON sein Datei, sollte ich nicht sowohl den Schlüssel als auch das Val brauchen? – Elliot

+0

THen Sie betrachten Javascript zweidimensionale Arrays –

0

werden Sie können das nicht tun, Ihre Funktion eine promise object zurückkehren wird, aber nie die Json Antwort selbst. Die Antwort wird erst aus dem Versprechen verfügbar sein, nachdem die Anforderung abgeschlossen ist (das ist nicht sofort nach Funktionsrückgabe, da die Anforderung asynchron ist).

Warum verwenden Sie nicht einfach den JSON aus dem Rückruf? Ich meine das:

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

Sie tun eine asynchrone Anfrage. $ .getJSON gibt das Ergebnis Ihres Callbacks nicht zurück.

Sie müssen einen Rückruf in Ihre createArray Funktion übergeben. Wenn Ihre JSON-Daten bereits ein Array sind, müssen Sie die Antwortdaten nicht verarbeiten.

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

So zum Beispiel würde man dies ändern:

var myArray = createArray(); 
// Process myArray 

in dieser:

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

Das Problem ist, dass Sie nicht nur das Ergebnis einer Netzwerkanforderung zuordnen können. Wenn Sie getJSON aufrufen, starten Sie eine Netzwerkanfrage, aber nachdem die Anfrage gestartet wurde, wird die JS weiter andere Sachen laufen lassen. Wenn Sie das Ergebnis einer asynchronen Anfrage erhalten, müssen Sie einen Rückruf verwenden, der diese Daten verarbeitet und etwas damit macht.

+0

Ich bin mir nicht sicher, ich verstehe ... Wie rufe ich die Funktion dann, um das Array zu bekommen? Ich habe nichts in den Rückruf zu setzen. – Elliot

+0

Jede Logik, die Sie verwenden, dass Daten verwendet werden, würde in die Callback-Funktion versetzt werden. Wenn Sie ein wenig Kontext geben, wie Sie das nennen, kann ich ein Beispiel geben. – loganfsmyth

+0

Ich möchte nur eine Variable in einer anderen Funktion erstellen, die das Array hat. D. H. Var myArray = createArray(); – Elliot

0

Was Sie von 'Json' bekommen, ist ein Array. versuchen dies,

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


alert(ar[0].name);​ 

Dies würde den Namen "Joe" aufmerksam machen. ar[0] ist das erste Element des Arrays und in Ihrem Fall ist dies ein Objekt mit den Eigenschaften name und number. Sie können sie auf normale Weise erhalten/einstellen.

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

      myarray=json; 
    }); 

Jetzt myArray ist ein Array mit Ihren Objekten.

1

Wie loganfsmyth sagte, Sie berücksichtigen nicht, dass $ .getJSON asynchron ist, und es wird nicht zurückgeben, was Sie denken, es ist (es gibt tatsächlich ein jqXHR-Objekt zurück.Schreiben Sie Ihren Code, um die asynchrone Natur mit Verschlüsse zu behandeln:

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); 
} 
Verwandte Themen