I need to store a value of json response to use in another function.
I have this code:
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('someemail@emailsome.com');
If I go to browser console use console.log, data.data.id_mdl show correctly value, but if I use "return" to store value, code no show any error and no function.
Please helpe with any idea to resolve this.
Issue is that its asynchronous and when you call the method, its already done with the call before getting a response back from the post request. try wrapping it around a promise and see if that works!
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("example@example.com")
.then(id => {
console.log("ID:", id);
})
.catch(error => {
console.error("Error:", error);
});