I am trying to write a JS code that will cancel the “btn_submit” buttons .onclick event if the given number already exists in the database. I use AJAX to query the DB for the given number and to determine if the should send the data to a .php site which will upload the question. To determine this I need the numOfRows variable’s value, but because I set it in AJAX it will stay on 0. The validation() function will finish before my AJAX query finishes and this causes the problem that will always state that the given number does not exist in the DB (numOfRows will always stay on 0). How can I await the AJAX query’s finish before I compare the numOfRows to 0 in my validation() function’s ending lines? If the number already exists in the DB, I need to return false to this line:
document.getElementById(“btn_submit”).onclick = validation;
Thank you!
var textAreaList; var numOfRows = 0; var finished = false; document.getElementById("btn_submit").onclick = validation; textAreaList = document.getElementsByClassName("text_input"); function validation() { loadNumRows(); try { document.getElementById('failure').hidden = true; } catch(e) { console.log(e.message); } textAreaList = document.getElementsByClassName("text_input"); var failValidation = false; for (var i = 0; i < textAreaList.length; i++) { console.log(textAreaList[i]); if (textAreaList[i].value == "") { textAreaList[i].style.border = "2px solid #ff0000"; failValidation = true; } else { textAreaList[i].style.border = "2px solid #286C2B"; } } return !(failValidation || numOfRows != 0); } function loadNumRows(){ $.ajax({ url: 'php/SeeIfNumberExists?number=' + document.getElementById('number_inp').value, type: "GET", cache: false, success: function (html) { numOfRows = parseInt(html); } }); }
Advertisement
Answer
use of async/await
with a transpilers like Babel to get it working in older browsers. You’ll also have to install this Babel preset and polyfill from npm:
npm i -D babel-preset-env babel-polyfill
Then
function getData(ajaxurl) { return $.ajax({ url: ajaxurl, type: 'GET', }); }; async function test() { try { const res = await getData('https://api.icndb.com/jokes/random') console.log(res) } catch(err) { console.log(err); } } test();
or the .then
callback is just another way to write the same logic.
getData(ajaxurl).then((res) => { console.log(res) });