OpenMRS uses dwr for AJAX. In a sentence, dwr converts java objects to javascript and vice versa.

DWR in core openmrs

Using DWR in a JSP page

<script src="<openmrs:contextPath/>/dwr/interface/DWRPatientService.js"></script>
<script>

DWRPatientService.findPatients("John", false, objectsFound);

function objectsFound(patients) {
  alert("There are " + patients.length + " patients named john");
}

</script>

Adding DWR into your module

Add to config.xml:

<dwr>
		<allow>
			<create creator="new" javascript="DWRMyModuleService">
				<param name="class" value="@MODULE_PACKAGE@.web.DWRMyModuleService"/>
				<include method="getAllLocations"/>
			</create>
		</allow>

		<signatures>
			<![CDATA[
			import @MODULE_PACKAGE@.web.DWRMyModuleService;
			DWRMyModuleService.getAllLocations();
			]]>
		</signatures>
	</dwr>

Create this class:

public class DWRMyModuleService {

 public List<String> getAllLocations() {
     List<String> locationNames = new Vector<String>();
     for (Location loc : Context.getAllLocations()) {
           locationNames.add(loc.getName());
     }
     return locationNames;
}