This is in response to this thread.

I agree that it is ideal to use async requests as much as possible, even if it requires refactoring much of your other code to make it work that way. However, there is value in having the option to make a synchronous call if one should wish, and there are situations where it may be desired. Not to mention that many people have requested this functionality.

Anyway, here it is:
Code:
Ext.lib.Ajax.request = function(method, uri, cb, data, options) {
	if (options) {
		var hs = options.headers;
		if (hs) {
			for (var h in hs) {
				if (hs.hasOwnProperty(h)) {
					this.initHeader(h, hs[h], false);
				}
			}
		}
		if (options.xmlData) {
			this.initHeader('Content-Type', 'text/xml', false);
			method = 'POST';
			data = options.xmlData;
		}
		var async = (options.async === false) ? false : true;
	}

	return this.asyncRequest(method, uri, cb, data, async);
};

Ext.lib.Ajax.asyncRequest = function(method, uri, callback, postData, async) {
	var o = this.getConnectionObject();

	if (!o) {
		return null;
	}
	else {
		o.conn.open(method, uri, async);
	
		if (this.useDefaultXhrHeader) {
			if (!this.defaultHeaders['X-Requested-With']) {
				this.initHeader('X-Requested-With', this.defaultXhrHeader, true);
			}
		}
	
		if (postData && this.useDefaultHeader) {
			this.initHeader('Content-Type', this.defaultPostHeader);
		}
	
		if (this.hasDefaultHeaders || this.hasHeaders) {
			this.setHeader(o);
		}
	
		this.handleReadyState(o, callback);
		o.conn.send(postData || null);
	
		return o;
	}
};
Example:
Code:
Ext.Ajax.request({
	url: 'some_page.php',
	method: 'POST',
	success: success,
	failure: failure,
	scope: this,
	params: {foo: 'bar'},
	async: false
});


// or directly ...
Ext.lib.Ajax.request('POST', url, callback, params, {async: false});

DISCLAIMER: This is ONLY for use with ext-base.js.