Skip to main content

Call ajax after completion of another ajax ,Wait for ajax to return.


Lets suppose you are trying to set loggedIn username to the header of your web page and you have 2 ajax which get fired

1st Ajax : Which is decorating the header

2nd Ajax : Which gets the username

So if 2nd AJAX become first in the race then username is not visible to you as 1st ajax is responsible for decorating the header and if there is no header there is no place where you can set header.

so to be very sure that our username is visible on the screen, we should wait for the header(1st ajax)to complete


document ready function:


$(document).ready(function () {

 //calling this method to get the fetch logged in user

 fetchloggeInUser();

});



1st Ajax request : run in parallel with 2nd ajax 

this is building our header part
(function ($) {
  $.pageDecorate = {
  //declare a global variable so that it can be used.
  decorateDeferred : null,
  //set response of the ajax in a variable
  var decoratorDeferred = $.ajax({
    url : 'setHeader',
    type : 'get',
    data : decorateHeaderData,
    dataType : 'json',
    success : function (data) {
     //response of testAjax sets in decorateDeferred
     decorateDeferred = $.pageDecorate.testAjax();
    }
   });


Global declaration :

  //set value of global variable decorateDeferred so
  // that it can be use as a reference

  $.pageDecorate.decorateDeferred = decorateDeferred;


  },

Method to call :
 testAjax : function () {

  var navHtml = '<ul>';
  navHtml += '<div class="divHeader" title="login">';
  navHtml += '<div class="role">';
  navHtml += '</div>';
  navHtml += '</div>';
  navHtml += '</ul>';
  //append this to header of your page
  $('.header').append(navHtml);
 }
});


2nd Ajax:

fetchloggeInUser : function () {

 $.ajax({

  url : "loggedInUser",

  type : "POST",

  success : function (data) {

   //although this success block call when ajax get 
   //fired but this code runs when it get response
   //after the success response of $.pageDecorate.decorateDeferred 
   this below success get called

   $.pageDecorate.decorateDeferred.success(function () {

    $('.divHeader').find('.role').text(userName);

   });

  }

 });

}


That 's it you are done.

Comments

Popular posts from this blog

Extent report plugin for cucumber framework

Extent Reports  are the most popular  reporting  used with Selenium. ExtentReport API makes our life easy to generate interactive  report  with simple configuartions. It supports almost all Java and .NET test frameworks such as TestNG , JUnit , NUnit etc Here we are discussing about  a plugin which is build on  Extent Report specially for Cucumber. This plugin is used to simple out the implementation of  Extent Report  in  Cucumber Framework .  We are creating a maven project to implement the integration of our plugin with cucumber 1. Create new maven project in any tool eclipse/sts/intellij 2. Open pom.xml and update below entries. Step 1 : Add Cucumber Extent Reporter library to Maven Project Add  cucumber-extentsreport <dependency>      <groupId> com.vimalselvam </groupId>      <artifactId> cucumber-extentsreport </artif...

java: You aren't using a compiler supported by lombok, so lombok will not work and has been disabled.

  In order to make projects compile with the existing builds of Lombok processor, as a workaround you can use the flag -Djps.track.ap.dependencies=false which should be added to File | Settings | Build, Execution, Deployment | Compiler | Build process VM options field. This will disable collection of dependencies specified by an annotation processor when Filer methods are called

Execution default of goal org.springframework.boot:spring-boot-maven-plugin:1.2.3.RELEASE:repackage failed: Unable to find main class

Solutions:  Solution 1 : You needed to change the packaging parameter to jar from pom. Also, the repositories , pluginRepositories , the maven-compiler-plugin and the spring-boot-maven-plugin's version and executions weren't needed. Solution 2:  Try mvn install and see if it works Solution 3: Preview: <properties> <!-- The main class to start by executing java -jar --> <start-class> com.mycorp.starter.HelloWorldApplication </start-class> </properties> Solution 4: Enable the main() method in your Application.java. Configure spring-boot-maven-plugin to specify the class with the main class (Spring should find it anyway if you have one, but good to be explicit): Preview: <plugin> <groupId> org.springframework.boot </groupId> <artifactId> spring-boot-maven-plugin </artifactId> <version> ${spring-boot-version} </version>...