您好:
如下語法
getClassno(str_arr) 共用AJSX 取後端資料回傳
OnBlur_1(參數1)
OnBlur_2(參數2)
目前alert會 先跳出,再去執行 getClassno(str_arr)
要如何讓
let obj= getClassno(str_arr); //--後端抓資料 的 getClassno(str_arr)執行完畢後
回傳,再繼續跑
alert(obj)?
有試過 async: false ,但沒效
謝謝
function OnBlur_1() {
let obj= getClassno(str_arr); //--後端抓資料
alert(obj)
}//---
function getClassno(str_arr) {
//let result = "";
let obj;
$.messager.progress({ msg: 'get controls ...' });
setTimeout(function () {
$.ajax({
type: "POST",
url: '../handler....', //
data: {
mode: "method",
method: "getClassno",
parameters: str_arr
},
cache: false,
async: false,
success: function (data) {
result = data; //這邊回傳字串
obj = JSON.parse(result);
return obj;
}//--success
});
}, 1);
https://jsbin.com/moxedigedi/edit?html,js,output
async function getClassno() {
// setTimeout不是promise,不能直接用await,得用Promise包起來
function sleep(ms) {
return new Promise((resolve) => {
setTimeout(() => {
resolve();
}, ms);
});
}
await sleep(2000);
// ajax是隨便找一個打的api
const res = await $.get("https://api.github.com/users/shawnquinn")
return res.login
}
getClassno().then((id)=>{alert(id)});
我這沒做錯誤處理,自己做。
function getClassno(str_arr) {
let obj;
return new Promise((resolve, reject) => {
$.messager.progress({ msg: 'get controls ...' });
setTimeout(function () {
$.ajax({
type: "POST",
url: '../handler....',
data: {
mode: "method",
method: "getClassno",
parameters: str_arr
},
cache: false,
async: false,
success: function (data) {
result = data; //這邊回傳字串
obj = JSON.parse(result);
// return obj;
resolve(obj);
}
});
}, 1);
})
}
async function OnBlur_1(){
let obj = await getClassno(str_arr); //--後端抓資料
alert(obj)
}
這樣試試看 應該可以
建議學一下 Promise async await
這樣以後遇到這種異步問題比較好處理
學會Promise後
我推薦你試試看用JS原生的Fetch API來跟後端進行溝通