Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to await the ajax request?

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);                        }     }); } 
like image 743
masm64 Avatar asked Dec 23 '14 00:12

masm64


People also ask

How do you await Ajax response?

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();

Can I use await with Ajax?

I recently remembered this and I thought to myself: Since async/await is just Promise's under the hood, I wonder if I can use async/await with jQuery's $. ajax(). Turns out, you can!

What is async await Ajax?

The jQuery Ajax async is handling Asynchronous HTTP requests in the element. It is a procedure to send a request to the server without interruption. It is an Asynchronous method to send HTTP requests without waiting response. It is a function to working on a server without associating more than on request.


1 Answers

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.

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(function(res) {     console.log(res) } 
like image 68
Murtaza Hussain Avatar answered Sep 28 '22 09:09

Murtaza Hussain