1

いくつかの文字列を配列にプッシュした後、JavaScript配列が未定義のオブジェクトを追加するのに問題があります。

$(function() {
    var formTagArr = [];
    $( "button", "#start-button" ).click(function() {
            $.getJSON('http://127.0.0.1:8000/some_url/', function(data) {
                formTagArr.push(buildForm(data));
                console.log(formTagArr);
                displayForm(formTagArr);
            });
    return false;
    });

    function buildForm(data) {
        for (var i = 0; i < data.length; i++) {
            var html = "";
            var questionsTags = "<fieldset><p>" + data[i].question + "</p>";
            var answersTags = "";
            for (j = 0; j < data[i].answers.length; j++) {
                answersTags += "<input type='radio' name='" + data[i].qid + 
                    "' value='" + data[i].answers[j] + "' /" + ">" + 
                     data[i].answers[j] + "\n";
            }
            html = questionsTags + answersTags + "</fieldset>";
            formTagArr.push(html);
        }
    }

    function displayForm(arr) {
        if (arr.length === 0) {
            return false;
        }
        var info = arr.pop();
        $("#question-form").append(info[0]);
    }
}); 

/ some_url /はこのJSONを返します:

[{"qid": 4, "question": "How many legs does a spider have?", "answers": ["4", "6", "8", "10"]}, {"qid": 2, "question": "When did Nigeria become a republic?", "answers": ["1960", "1961", "1962", "1963"]}, {"qid": 1, "question": "When did Nigeria gain independence?", "answers": ["1960", "1961", "1962", "1963"]}, {"qid": 3, "question": "How many days are in a leap year?", "answers": ["360", "362", "365", "366"]}]

およびconsole.log(formTagArr); 上記のコードでは、次のようになります。

["<fieldset><p>How many l...e='10' />10\n</fieldset>", "<fieldset><p>When did N...963' />1963\n</fieldset>", "<fieldset><p>When did N...963' />1963\n</fieldset>", "<fieldset><p>How many d...'366' />366\n</fieldset>", undefined]

このため、infoが定義されていないため、displayForm()は失敗します。もちろん、条件を使用して未定義のオブジェクトをスキップすることもできますが、そもそも未定義のオブジェクトがどのようにしてそこに到達したのかを正確に知りたいのです。
私は何を間違えましたか?

4

2 に答える 2

2
formTagArr.push(buildForm(data));

buildForm 関数は何も返さず、上記のコードはその関数の結果を配列にプッシュしようとします。return ステートメントのない関数は、未定義として終了します。

それだけのようです

buildForm(data)

この関数はすでに formTagArr 配列にプッシュされているためです。

于 2012-04-25T12:20:38.690 に答える
0

jsfiddle

formTagArr.push 呼び出しを削除し、displayForm 呼び出しで行を次のように変更する必要がありました: $("#question-form").html(info);

于 2012-04-25T12:28:55.033 に答える