Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

EXT Js Synchronous ajax request

How can I make synchronous ajax requests in EXT JS?

For example, given this code:

test1();
ajaxRequest(); //Ajax Request
test2();

The test2 function is executed without even finishing the execution of ajaxRequest(), which has an Ext.Ajax.request call .

How can I make text2() execute only after the ajaxRequest() function has been executed?

I understand that one way of doing it is to call the test2 function in a callback, but I have some dependencies and a lot of code that has to be executed after the ajax request, in a synchronous manner. Can you please help me with the best solution?

like image 815
Jemin Avatar asked Jun 03 '11 21:06

Jemin


People also ask

Can AJAX requests be made synchronous?

AJAX can access the server both synchronously and asynchronously: Synchronously, in which the script stops and waits for the server to send back a reply before continuing. Asynchronously, in which the script allows the page to continue to be processed and handles the reply if and when it arrives.

What is synchronous AJAX request?

What is Synchronous Ajax? Synchronous Ajax request is the process in which execution of the request stops until a response is received and Asynchronous Ajax request means the script continue the process without waiting for the server to reply. It will handle the reply if it arrives.

What is Ext AJAX?

Ajax to communicate with server-side code or service in the same domain. Ext. Ajax is a singleton instance of Ext. data. Connection which is main class to setup a connection.

Is AJAX synchronous or asynchronous?

AJAX (Asynchronous JavaScript and XML) is a technique aimed at creating better and faster interactive web apps by combining several programming tools, including JavaScript, dynamic HTML (DHTML) and Extensible Markup Language (XML).


2 Answers

I needed something similar and after looking the source code of Ext.Ajax.request() and Ext.data.Connection, I found that they check for a async attribute, on the request() method, so, it's actually possible to make a synchronous request, like this:

var response = Ext.Ajax.request({
    async: false,
    url: 'service/url'
});
var items = Ext.decode(response.responseText);

It seems this async attribute is not documented, so... of course... be aware that it may change in future releases.

like image 182
Redder Avatar answered Sep 18 '22 17:09

Redder


In Extjs.Ajax each AJAX call results in one of three types of callback functions:

  • success that runs if the AJAX call is successfully created and gets a response
  • failure that runs if the AJAX call fails to get a response
  • callback that runs AFTER the AJAX call gets a response

If you want to execute test2(); after your ajax request finishes,
then put your test2 function inside of a success, failure, or callback function; whichever one you choose is up to you...

More info on the success or failure function can be found here.

test1();
Ext.Ajax.request({
    url: 'page.php',
    params: {
        id: 1
    },
    // scope: this, // you can set the scope too
    callback: function(opt,success,respon){
        test2();
    } 
});

Note: This method doesn't work with ExtJS 3.

like image 20
Egy Mohammad Erdin Avatar answered Sep 20 '22 17:09

Egy Mohammad Erdin