簡體   English   中英

JavaScript function 與 Ajax 請求總是返回錯誤的值

[英]JavaScript function with Ajax request returns always the wrong value

我是 JavaScript 的新手,我想用 Flask、JavaScript 和 ZA7F511F35426B92824 創建一個網站。 目前我有一個問題。 我從我的 html 頁面調用 JS function。 該 function 創建一個 Ajax 請求並應返回一個值。

function getTime (idx) {
    const mo_time = 0;
    $.ajax({
        type: 'POST',
        url: '/currdata',
        data: '',
        contentType: 'application/json'
    })
    .done( (data) => {  
        //console.log("success"); 
        mo_time = data["time"]; 
     })
    .fail( (data) => {

        //Data acquisition failure
        //console.log("error");
        mo_time = 0;
    });
    return (mo_time);    
}

請求成功,但我總是得到 0 作為返回值。 如何將 data["time"] 值放入 mo_time 變量?

快速瀏覽一下,您正在嘗試重新分配const mo_time的值。 您是否嘗試過使用let

@Michael 常量是塊范圍的。 您可以使用 let 關鍵字聲明變量。 常量的值不能通過重新賦值來改變

對於 scope,請檢查: javascript 中的 scope

請檢查這些參考資料。 讓 var const

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let

是的,我試過了。 同時我找到了解決方案。 我必須在 ajax 請求中添加 async: false 。 問題是異步調用。 我在請求未完成時進行了退貨。

function getTime (idx) {
    var mo_time = 0;
    $.ajax({
        type: 'POST',
        url: '/currdata',
        data: '',
        async: false,
        contentType: 'application/json'
    })
    .done( (data) => {  
        //console.log("success"); 
        mo_time = data["time"]; 
     })
    .fail( (data) => {

        //Data acquisition failure
        //console.log("error");
        mo_time = 0;
    });
    return (mo_time);    
}

對於這種情況,我更喜歡使用帶有 promise 的 async/await 方法。 Ajax 請求是異步的。 當您以同步方式調用getTime方法時,您將獲得 0 值,該值來自const mo_time = 0; 在第二行代碼中。

試試看:

function getTime(idx) {
    return new Promise((resolve, reject) => {
        $.ajax({
            type: 'POST',
            url: '/currdata',
            data: '',
            contentType: 'application/json'
        }).done((result) => resolve(result)).fail((error) => reject(error));
    });
}

async function main() {
    const data = await getTime(1);

    console.log(data['time']);
}

main();

https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Asynchronous/Async_await

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM