我是 JavaScript 的新手,我想用 Flask、JavaScript 和 Python 創建一個網站。目前我有一個問題。我從我的 html 頁面呼叫一個 JS 函式。該函式創建一個 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 變數?
uj5u.com熱心網友回復:
快速瀏覽一下,您正在嘗試重新分配 a 的值const mo_time。你試過使用let嗎?
uj5u.com熱心網友回復:
@Michael 常量是塊范圍的。您可以使用 let 關鍵字宣告變數。常量的值不能通過重新賦值來改變
對于范圍,請檢查:javascript 中的范圍
請檢查這些參考資料。 讓 var const
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let
uj5u.com熱心網友回復:
是的,我試過了。同時我找到了解決方案。我必須在 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);
}
uj5u.com熱心網友回復:
對于這種情況,我更喜歡使用帶有 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
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/422568.html
標籤:
上一篇:Jquery功能不適用于所有按鈕
