我需要存储 json 响应的值以在另一个函数中使用。
我有这个代码:
const url_moodle = "https://xxxxx/xxxxx/app/appmoodlejson.php";
var moodleEmail = function (email){
$.post( url_moodle, { "email":email, "postvar":"email" }, "json")
.done(function( data, textStatus, jqXHR ) {
if(data.data){
// console.log(data.data.id_mdl);
return data.data.id_mdl;
}
})
.fail(function( jqXHR, textStatus, errorThrown ) {
toastr.error('Error, contact support');
if ( console && console.log ) {
console.log( "Fail response: " + textStatus);
}
});
};
var id_mdl = moodleEmail('[email protected]');
如果我进入浏览器控制台使用console.log,data.data.id_mdl显示正确的值,但如果我使用“return”来存储值,代码不会显示任何错误且没有功能。
请帮忙提供解决此问题的任何想法。
问题是它是异步的,当您调用该方法时,在从发布请求返回响应之前它已经完成了调用。尝试将它包裹在一个承诺中,看看是否有效!
var moodleEmail = function(email) {
return new Promise((resolve, reject) => {
$.post(url_moodle, { "email": email, "postvar": "email" }, "json")
.done(function(data, textStatus, jqXHR) {
if (data.data) {
// Resolve the promise with the response data
resolve(data.data.id_mdl);
} else {
// Reject the promise if no data is found
reject(new Error("No data found"));
}
})
.fail(function(jqXHR, textStatus, errorThrown) {
toastr.error('Error, contact support');
if (console && console.log) {
console.log("Fail response: " + textStatus);
}
// Reject the promise in case of an error
reject(new Error("Request failed"));
});
});
};
// Example usage:
moodleEmail("[email protected]")
.then(id => {
console.log("ID:", id);
})
.catch(error => {
console.error("Error:", error);
});