[英]Javascript Function always returns wrong value, although variable had correct values before
[英]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.