1

我有以下代码:在里面我放了 2alert()进行调试。为什么 alert2 在 alert1 之前显示???

<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 回答