Javascript val(#)不会更改AJAX调用后的选择-在调试/暂停时有效

Javascript val(#)不会更改AJAX调用后的选择-在调试/暂停时有效,javascript,jquery,ajax,selectlist,Javascript,Jquery,Ajax,Selectlist,我有一个有趣的问题-当我执行一个AJAX调用,根据页面加载或输入的筛选器使用新条目刷新此约会列表下拉列表时,.val()方法将不会设置 这就是AJAX方法的成功之处——基本上,它使用新条目备份AppointmentList下拉列表: $.map(data, function (item) { $('#AppointmentList').get(0).options[$('#AppointmentList').

我有一个有趣的问题-当我执行一个AJAX调用,根据页面加载或输入的筛选器使用新条目刷新此约会列表下拉列表时,.val()方法将不会设置

这就是AJAX方法的成功之处——基本上,它使用新条目备份AppointmentList下拉列表:

                    $.map(data, function (item) {
                        $('#AppointmentList').get(0).options[$('#AppointmentList').get(0).options.length] = new Option(item.AppointmentTime, item.ID);

                    });
这就是调用函数的原因,该函数基本上只包含重新填充#AppointmentList下拉列表的$.ajax()方法。当我重新获得新的值集时,我仍然需要它预先填充旧的“约会”

            var tempVal = $('#AppointmentList').val();
            DropDownList();
            $('#AppointmentList').val(tempVal);
这不起任何作用,并且重新创建的列表中的第一个元素被选中

但是,如果我将断点放在:

$('#AppointmentList').val(tempVal);
然后,似乎已经过了足够长的时间,这个下拉列表能够被更改-如果有一个断点,我继续-下拉列表将更改回我希望的值,如果我正在调试Javascript


有没有关于如何重构的想法?我一直在想,也许当我们实际执行$.map()函数时,我们可以在那里设置我们的旧值-但是这段代码似乎可以工作。。。我是否应该在Ajax结束和需要再次设置.val()之间有更多的时间。

问一个愚蠢的问题-想出一个愚蠢的答案-我猜。异步的。嗯

将这两行移到$.ajax()调用上方的位置:

然后,将设置值的行放在success中,但放在$.map()之后:


如果设置断点使其暂时起作用,则可能会重新加载页面或类似操作,例如,不了解ajax和回调的异步性质。如果异步获取值,则依赖于该值的任何内容都必须在
success
调用中处理,或者从
success
调用中发出警报。否则,你只是希望时机是对的。嗯~异步性。。。我很快就会尝到的。很好——那么我的直觉是正确的,我需要重构它以获得成功,而不是跟随执行。因此-异步。
var tempVal = $('#AppointmentList').val();
$('#AppointmentList').val(tempVal);