0

次のコードが期待どおりに動作しないため、jquery post の動作について理解できないことがあるはずです。

var list = [];
$.post("list", function(data){
    for(var i = 0; i < data.length; i++){
        list.push({label: data[i].label, value: data[i].value});
        alert(list[0].value);
    }
});
alert(list[0].value);

2 つのアラートに注意してください。最初のアラートには値があり、2 番目のアラートは「未定義」です。なぜですか? どうすればこれを回避できますか?私は $.get と $.ajax で同じ問題を抱えていたので、何か間違ったことをしているに違いありません。探してみましたが、本当に何も見つかりませんでした。

アップデート:

var templeList = [];
$.ajax({
        url: "templeList", 
        type: 'GET',
        success: function(data){
            for(var i = 0; i < data.length; i++){
                templeList.push({label: data[i].label, value: data[i].value});
                alert(templeList[0].value);
            }
        },
        cache: true,
        async:false
});
alert(templeList[0].value);

このコードはそれを解決します、迅速な対応に感謝します

4

2 に答える 2

2

内部の関数$.postはコールバックです。これは非同期で実行されます (サーバーから応答を受信した後)。つまり、list設定される前に、2 番目のアラートが実際に最初に呼び出されます。

これを回避するには、通常、2 番目のアラートを独自の関数内に配置し、非同期コールバック内から呼び出します。

var list = [];
$.post("list", function(data){
    for(var i = 0; i < data.length; i++){
        list.push({label: data[i].label, value: data[i].value});
        alert(list[0].value);
    }
    onReady();
});

function onReady() {
    alert(list[0].value);
}
于 2013-10-16T23:52:42.580 に答える