Jquery同步问题

时间:2012-10-09 09:59:40

标签: jquery

我有以下代码: 在里面我把2 alert()用于调试。 为什么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成为第一件事?

2 个答案:

答案 0 :(得分:2)

当文档准备就绪时触发Alert2,并在成功的ajax请求后触发Alert1。你的代码可以用以下形式重写:

<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(以及准备好文档)

答案 1 :(得分:0)

您可以通过将async设置为true或false来以同步/异步方式调用ajax函数。

$.ajax({
url : yourURL,
async : false,
...
});