2016-06-10 26 views
0

Gibt es eine Möglichkeit, wie ich die Daten aus einer JSON-Datei erhalten und sie in einem mehrdimensionalen Array in JavaScript speichern kann. Die JSON-Datei ist eine .php-Datei mit dem Header JSON.Speichern von JSON-Daten in einem Array

Ich habe bisher versucht:

var questionJSONS=""; 
$(document).ready(function(){ 
     var questionJ=""; 
     $.getJSON("http://localhost:8080/audioMillionaire/test2.php",function(result){ 
     $.each(result, function(i, item){ 
questionJ+= "['"+result[i].qid+"','"+result[i].description+"','"+result[i].a+"']"; 
    }); 
     setArray(questionJ);  
}); 

});

Und viele andere Dinge, aber keiner von ihnen scheint zu funktionieren.

+0

In Ihrem Beispiel ist 'questionJ' eine Zeichenfolge. Bitte zeigen Sie uns Ihre 'setArray()' Funktion. – BenM

Antwort

1

Ich denke, das ist, was Sie gemeint:

$(document).ready(function() { 
    var questions = []; 

    $.getJSON("http://localhost:8080/audioMillionaire/test2.php", function(result) { 
     $.each(result, function(i, item) { 
      questions.push([result[i].qid, result[i].description, result[i].a]); 
     }); 
    }); 
}); 

Wenn nicht, bitte kommentieren.

Edit: BenM war schneller

Edit:

Dies funktioniert auch, aber ich kann außerhalb von

Diese $ .getJSON

das Array nicht verwenden, weil Sie wahrscheinlich verwenden Code wie folgt:

... 
     questions.push([result[i].qid, result[i].description, result[i].a]); 
    }); 
}); 

console.log(questions); 

Da Javascript eine asynchrone Sprache ist, erfolgt der Konsolenprotokollaufruf vor dem Push, nachdem der JSON angefordert wurde. Sie können mehr darüber lesen here.

$(document).ready(function() { 
    console.log("set test to old"); 
    var test = "old"; 

    setTimeout(function() { 
     console.log("set test to new"); 
     test = "new"; 
     console.log("inside timeout: " + test); 
    }, 3000); // runs in 3 seconds 


    console.log("outside timeout: " + test); 
}); 

Dieser Code sollte ein gutes Beispiel liefern. Die Funktion setTimeout wartet nur 3 Sekunden und führt die Funktion aus (ähnlich der json-Anfrage).

Mit diesem Wissen sollten Sie selbst eine Lösung finden (wie zum Beispiel eine übergebene Funktion, nachdem das Array gedrückt wurde). Wenn nicht kommentieren.

Edit: Geänderter Link zu anderen, besseren Seite.

+0

Das funktioniert auch, aber ich kann das Array nicht außerhalb von $ .getJSON –

+0

verwenden Bitte lesen Sie meinen aktualisierten Beitrag. –

1

In Ihrem Beispiel wird questionJ als eine Zeichenfolge behandelt, und ohne Ihre setArray() Funktion zu sehen, ist es schwierig zu sagen, was falsch ist (ich weiß nicht, ob Sie die Zeichenfolge in dieser Funktion zum Beispiel analysieren).

jedoch davon aus, dass Sie für questionJ wollen ein Array von Arrays zu sein, sollten folgende Arbeiten:

questionJSONS = [ ]; 

$.getJSON('http://localhost:8080/audioMillionaire/test2.php', function(result){ 
    $.each(result, function() { 
     questionJSONS.push([ this.qid, this.description, this.a ]); 
    }); 
}); 

Beachten Sie, dass innerhalb der $.each Funktion, Sie this verweisen können, die auf den aktuell iterierten Artikel bezieht . Bei Verwendung dieser Methode (mit push() und der Array-Datenstruktur) direkt wird der Datentyp auch von JSON beibehalten.

Da Sie nicht direkt mit dem DOM innerhalb des Snippets interagieren, müssen Sie es auch nicht in den Handler DOMReady einfügen.

+0

Vielen Dank für Ihre Antwort, es funktioniert, aber nur mit dem Array FrageJSONS in $ .getJSON deklariert, und ich kann es nicht außerhalb von $ .getJSON, die ich tatsächlich brauche verwenden. P. Dies ist das erste Mal, dass ich stackoverflow benutze, um Fragen zu stellen, damit ich Probleme beim Formatieren habe: p. –

+0

@BesnikCani Sie können die 'var' -Definition vor' questionsJSONS' entfernen, um sie in eine vollständig beschränkte Variable umzuwandeln. Das sollte dein Problem lösen. – BenM

+0

es funktioniert immer noch nicht, wenn ich console.log es, es zeigt nur zwei leere eckige Klammern, wenn ich console.log es innerhalb der $ .getJSON, es druckt das eigentliche Array. –

Verwandte Themen