【发布时间】:2020-08-23 05:12:50
【问题描述】:
上下文:制作一个 ajax 繁重的页面,根据先前选择器选择的内容更改不同选择器中的值。正在根据之前的条目制作“重新填充”选项。
When selector 1 is changed, an ajax call is made that populates both selector 2 and 3. Selector 1's options never change.
当您从先前的条目“重新填充”时,代码首先更改选择器 1 的值,然后激活选择器 1 上的更改事件。
function repopulateFromEntry(event) {
// We want the children of the parent TR.
// <tr>
// <td>...</td>
// ...
// <td><button></td>
// <tr>
let td_list = event.target.parentElement.parentElement.children;
$('#selector1').val(td_list[0].innerHTML);
$('#selector1').change();
// Do other things that rely on prior to be finished
// Problem is here.
};
选择器 1 的更改事件如下所示。
async function executeAjax(url, success) {
return await $.ajax({
url: url,
type: "GET",
success: success
});
}
$('#selector1').change(async function(e) {
await executeAjax('api/selector2' + $("#selector1").val(), function() {
// Set selector2 from ajax data
});
await executeAjax('api/selector3' + $("#selector1").val(), function() {
// Set selector3 from ajax data
});
});
根据 selector1 的值设置选择器选项后,它会进入并为选择器 2 和 3 选择正确的值。
我的问题是选择器 2 和 3 的值的重新选择在选项完全填充到选择器之前被调用,导致重新选择失败。
我显然在 async/await/ajax 部分中遗漏了一些东西,以防止它在没有完成两个调用的情况下继续,但我似乎看不出我的问题是什么。
【问题讨论】:
-
您应该从
executeAjax函数中删除回调参数。改用承诺链! -
“重新选择选择器 2 和 3 的值” - 代码在哪里?
标签: javascript jquery ajax async-await