1

alert()私は次のコードを持っています:私はデバッグのために2を入れました。alert1の前にalert2が表示されるのはなぜですか?

<script language="javascript" type="text/javascript">
    $(document).ready(function () {

        $.ajax({
            type: "POST",
            url: "ManagerBaseKit.aspx/GetDummyVersions",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (result) {
                var items = [];
                $.each(result.d.Version, function (key, val) {
                    items.push('<li id="' + key + '">' + val + '</li>');
                });
                $('<ol/>', {
                    'id': 'selectable',
                    html: items.join('')
                }).appendTo('.baseVersionsTest');
                alert('1'); // should be alerted 1st

            }
        });

        alert('2'); // should be alerted 2nd

    });

</script>

編集:どうすれ$.ajaxば最初に呼ばれるようにすることができますか?

4

2 に答える 2

2

Alert2 はドキュメントの準備ができたときにトリガーされ、Alert1 は ajax リクエストが成功した後にトリガーされます。コードは次の形式で書き直すことができます。

<script language="javascript" type="text/javascript">
    $(document).ready(function () {
     alert('2'); // Still the same functionality

        $.ajax({
            type: "POST",
            url: "ManagerBaseKit.aspx/GetDummyVersions",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (result) {
                var items = [];
                $.each(result.d.Version, function (key, val) {
                    items.push('<li id="' + key + '">' + val + '</li>');
                });
                $('<ol/>', {
                    'id': 'selectable',
                    html: items.join('')
                }).appendTo('.baseVersionsTest');
                alert('1'); // should be alerted 1st

            }
        });



    });

</script>

これで、Alert2 が最初に (そしてドキュメントの準備ができたときに) トリガーされる理由がわかります。

于 2012-10-09T10:03:27.433 に答える
0

async を true または false に設定することで、同期/非同期の方法で ajax 関数を呼び出すことができます。

$.ajax({
url : yourURL,
async : false,
...
});
于 2012-10-09T11:04:11.510 に答える