2012-04-02 7 views
1

Ich verwende die akzeptierte Antwort auf this question, um mir zu helfen, ein HTML-Auswahlmenü aus einem JSON-Array mit jQuery zu erstellen.Ein JSON-Array aus PHP in einer jQuery-Funktion lesen

ist mein JSON-Array aus einem PHP-Skript als $ Menü und sieht wie folgt geführt:

{ "options": [ 
    { "id":"7","name":"Smith, John"}, 
    { "id":"4","name":"Jones, Tom"} 
    ] 
} 

Zuerst habe ich das Skelett meiner Auswahlmenü erstellen und es in die Seite einfügen:

var div = '<div class="row">'; 
var label = '<label for="employee">Employee</label>'; 
var select = '<select name="employee id="employee">'; 
var close = '</select></div>'; 
var menu = div + label + select + close; 

$('#clicked_link').prepend(menu); 

Dann versuche ich die $ Menü Array jQuery wie folgt weitergeben müssen:

var json = '<?php echo $menu; ?>'; 

Dann versuchen Sie die Optionen I anhängen t er neu wählen Sie das Menü erstellt, mit dem Beispiel aus den linked question:

var options = eval('(' + json + ')'); 
var length = options.length; 

for (var j = 0; j < length; j++) 
{ 
    var newOption = $('<option/>'); 
    newOption.attr('id', options[j].id); 
    newOption.attr('name', options[h].name); 
    $('#employee').append(newOption); 
} 

Das Auswahlmenü zeigt wie erwartet, aber es enthält keine Optionen. Kann jemand sehen, wo ich meine Fehler mache? Danke im Voraus.

Überarbeitete Rocket Lösung zu übernehmen:

var json = <?php echo $menu; ?>; 

var options = json.options; 
var length = options.length; 

for (var j = 0; j < length; j++) 
{ 
    var newOption = $('<option/>'); 
    newOption.attr('value', options[j].id); 
    newOption.attr('text', options[j].name); 
    $('#employee').append(newOption); 
} 

Antwort

7

Sie brauchen nicht eval zu verwenden, oder sogar JSON.parse hier. JSON ist gültiger JavaScript-Code. Sie können dies nur tun:

var json = <?php echo $menu; ?>; // Note: the quotes have been removed. 

Dies würde den folgenden Code ein:

var json = { "options": [ 
    { "id":"7","name":"Smith, John"}, 
    { "id":"4","name":"Jones, Tom"} 
    ] 
}; 

die, wie Sie sehen können, ist gültig JavaScript-Code.

Dann können Sie var options = json.options tun.

+0

Danke für die Antwort. Ich habe Ihre Lösung implementiert, bekomme aber das gleiche Ergebnis (ein leeres Auswahlmenü). Ich habe die aktualisierte Version in meiner Frage gepostet. Mache ich auch etwas falsch in meiner Schleife? – cantera

+0

@ cantera25: In Ihrer Schleife haben Sie 'Optionen [h] .list'. Was ist "h"? Auch haben Ihre 'options'-Objekte keine 'list'-Eigenschaft. –

+1

Verstanden - das [h] war ein Tippfehler in der akzeptierten Antwort in der verknüpften Frage, und ich nahm nur an, dass es richtig war. Ich werde das jetzt bearbeiten. Das Ändern nach [j] und das Wechseln zu "Text" und "Wert" innerhalb der Schleife haben den Trick gemacht. Danke nochmal an alle. – cantera

2

warum nicht

var options = JSON.parse(json).options; 
2

+1 zu Rockets Antwort, und ich glaube, es gibt auch einen Bug in Ihrem Loop. Die Linie

newOption.attr('name', options[h].list);

h ist nicht definiert. Sie möchten wahrscheinlich j stattdessen. Und das name Attribut ist nicht sinnvoll auf einem option. Stellen Sie für den Wert, der angezeigt wird, text ein. Geben Sie für den Wert, der beim Übermitteln des Formulars an den Server gesendet wird, value ein.