1

ここから最近リリースされたjQueryGanntプラグイン/アプリケーションで遊んでいて、サーバーに保存されているさまざまなガントチャートの名前が入力されたドロップダウンを書き込もうとしています。このドロップダウンを生成するには、次の関数を使用します。

$.ajax({
    url: "GanttLoader.ashx?action=getGantts",
    context: document.body, 
    type: "GET",
    dataType: "json",
    success: function(data) {
        if(data.gantts != null) {
            for(var gantt in data.gantts) {
                alert(gantt.name + " is locked " + gantt.locked);
                var toAppend = $("<option/>").val(gantt.name).html(gantt.name);
                if(gantt.locked) { toAppend.attr("disabled", "disabled"); }
                $("#saved_gantts").append(toAppend);
            }
            $("#saved_gantts").append($("<option/>").val("add new").html("add new"));
                saved_gantts_loaded = true;
            }
            else if(data.status == "none") {
                $("#saved_gantts").append($("<option/>").val("add new").html("add new"));
            }
        },
        error: function() { alert("couldn't load gantt charts"); }
});

現時点では、これはドロップダウンを生成するためにサーバーが送信しているものです (ガント データはまだ送信されていません。開いているガントと現在編集中のガントの単純なリストのみです)。

{
  "gantts": [
    {
      "name": "other",
      "locked": true
    },
    {
      "name": "test",
      "locked": true
    }
  ]
}

何らかの理由で、成功関数の呼び出しで for ループが配列に格納されている両方のオブジェクトをループしますが、アラートは常に出力され"undefined is locked undefined"ます。ハンドラーまたは返される JSON の何が問題なのか、誰かが知っていますか?

前もって感謝します。

4

2 に答える 2

3

data.gantts[gantt].nameの代わりに使用する必要がありgantt.nameます。

更新されたコードは次のとおりです。

$.ajax({
    url: "GanttLoader.ashx?action=getGantts",
    context: document.body, 
    type: "GET",
    dataType: "json",
    success: function(data) {
        if(data.gantts != null) {
            var gantts = data.gantts;
            for(var i in gantts) {
                alert(gantts[i].name + " is locked " + gantts[i].locked);
                var toAppend = $("<option/>").val(gantts[i].name).html(gantts[i].name);
                if(gantts[i].locked) { toAppend.attr("disabled", "disabled"); }
                $("#saved_gantts").append(toAppend);
            }
            $("#saved_gantts").append($("<option/>").val("add new").html("add new"));
                saved_gantts_loaded = true;
            }
            else if(data.status == "none") {
                $("#saved_gantts").append($("<option/>").val("add new").html("add new"));
            }
        },
        error: function() { alert("couldn't load gantt charts"); }
});
于 2012-08-30T20:37:46.977 に答える
1

あなたは使いたいかもしれません

for (i=0;i<data.gantts.length;i++) {
    alert(data.gantts[i] + " is locked " + data.gantts[i].locked);

特定のフレームワークを扱う場合、for(... in ...) 形式はやや信頼できないことがわかりました。

于 2012-08-30T20:43:48.300 に答える