1

jQueryで次の問題が発生します。私はこのコードを使用します:

function populate_select_from_json(select, json_url) {
    select.empty();
    $.getJSON(json_url, function(data) {
        $.each(data, function(key, value) {
            $("<option></option>")
                .attr("value", value.name)
                .text(value.title)
                .appendTo(select);
        });
    });
    select.children(":first").attr("selected", true);
}
$(document).ready(function() {
    var value_type = $("#value_type");
    populate_select_from_json(value_type, SOME_URL);

    var unit = $("#unit");
    populate_select_from_json(unit, ANOTHER_URL + value_type.val());

});

私はしたかった:

  1. ドキュメントをロードする
  2. 関連するデータベースからJSONデータを取得する
  3. #value_type <select>データをアイテムに入れる
  4. selectの値を取得し#value_type、データベースにもう一度クエリを実行して、別のselect項目にデータを入力します。

問題は、を呼び出すと、が正しく入力されていても、 value_type.val()常に出力されることです。私はここで何が間違っているのですか?null#value_type <select>

4

1 に答える 1

2

私はこのようなものがでうまくいくかもしれないと思いますpromises

これらの線に沿って(テストされていない):

var populate_select_from_json = function($select, json_url) {
    $select.empty();
    return $.getJSON(json_url, function(data) {
        $.each(data, function(key, value) {
            $("<option></option>")
                .attr("value", value.name)
                .text(value.title)
                .appendTo($select);
        });
        $select.children(":first").attr("selected", true);
    });
};

$(document).ready(function() {
    var $value_type = $("#value_type");
    var $unit = $("#unit");

    populate_select_from_json($value_type, SOME_URL).done(function(){
      populate_select_from_json($unit, ANOTHER_URL + $value_type.val());
    });
});
于 2013-01-01T17:14:52.717 に答える