亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

等待函數內的多個 ajax 調用?

等待函數內的多個 ajax 調用?

ibeautiful 2022-08-04 17:14:46
上下文:創建一個ajax重頁面,根據先前選擇器的選擇更改不同選擇器中的值。致力于根據先前的條目制作“重新填充”選項。當選擇器 1 發生更改時,將進行 ajax 調用,以填充選擇器 2 和 3。選擇器 1 的選項永遠不會改變。當您從前面的條目“重新填充”時,代碼首先更改選擇器 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    });});根據選擇器 1 的值設置選擇器選項后,它進入并為選擇器 2 和 3 選擇正確的值。我的問題是,在選項完全填充到選擇器之前,選擇器2和3的值的重新選擇被調用,從而使重新選擇失敗。我顯然從異步/等待/ajax部分遺漏了一些東西,以防止它在沒有完成兩個調用的情況下繼續,但我似乎看不到我的問題是什么。
查看完整描述

1 回答

?
小唯快跑啊

TA貢獻1863條經驗 獲得超2個贊

好的,所以我對 $.ajax 調用使用了 async/await,然后在更改事件處理程序中,我使用 .then 方法對生成的數據進行操作。(也可以在事件處理程序中使用異步等待,但是由于您最初擁有它并且它不起作用,因此我選擇了promise)。


我很確定這應該有效,但如果沒有,請讓我知道控制臺顯示的內容。


注意您可能需要在設置每個選擇器的值之前,控制臺.log結果并提取要查找的數據。您可以在 .then 方法中執行此操作。


async function executeAjax(url) {


    let result;


    try { 

        result = await $.ajax({

            url: url,

            type: "GET"

        });


        return result;


    } catch (error) {

        console.log(error);

    }

}


$('#selector1').change(function(e) {


    executeAjax('api/selector2' + $("#selector1").val())

    .then((result) => { 

        // console.log(result);  <-- may need to find and pull the data you are looking for out of result

        // let myVal = result[?]['something'].orother;

        $("#selector2").val(result); 

    });


    executeAjax('api/selector3' + $("#selector1").val())

    .then((result) => {

        // console.log(result);  <-- may need to find and pull the data you are looking for out of result

        // let myVal = result[?]['something'].orother;

        $("#selector3").val(result);

    });


});


查看完整回答
反對 回復 2022-08-04
  • 1 回答
  • 0 關注
  • 128 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號