Try Tuts+ Premium, Get Cash Back!
5 Ways to Make Ajax Calls with jQuery

5 Ways to Make Ajax Calls with jQuery

Tutorial Details
  • Topic: jQuery
  • Difficulty: Beginner
  • Estimated Completion Time: 20 minutes

There are at least five ways to make AJAX calls with the jQuery library. For beginners, however, the differences between each can be a bit confusing. In this tutorial, we’ll line them up and make a comparison. Additionally. we’ll review how to inspect these AJAX calls with Firebug as well.

What is AJAX

This section is for those who have no idea what AJAX is. If you don’t fall into this category, feel free to skip to the next section.

AJAX stands for asynchronous JavaScript and XML. If you see another term XHR, which is shorthand for XML HTTP request, it’s the same thing. Don’t be afraid of this jargon; AJAX is not rocket science.

  • In Gmail, switch from inbox to draft. Part of the page is changed, but the page is not refreshed. You remain on the same page. Url has not changed (except for the #draft at the end of the url, but that’s still the same webpage).
  • In Google Reader, select a feed. The content changes, but you are not redirected to another url.
  • In Google Maps, zoom in or zoom out. The map has changed, but you remain on the same page.

The key to AJAX’s concept is “asynchronous”. This means something happens to the page after it’s loaded. Traditionally, when a page is loaded, the content remains the same until the user leaves the page. With AJAX, JavaScript grabs new content from the server and makes changes to the current page. This all happena within the lifetime of the page, no refresh or redirection is needed.

Caching AJAX

Now we should know what AJAX actually is. And we know that, when Gmail refreshes some content without redirection, an AJAX call is made behind the scenes. The requested content can either be static (remains exactly the same all the time, such as a contact form or a picture) or dynamic (requests to the same url get different responses, such as Gmail’s inbox where new mails may show up any time).

For static content, we may want the response cached. But for dynamic content, which can change in a second’s time, caching AJAX becomes a bug, right? It should be noted that Internet Explorer always caches AJAX calls, while other browsers behave differently. So we’d better tell the browser explicitly whether or not AJAX should be cached. With jQuery, we can accomplish this simply by typing:

	$.ajaxSetup ({
		cache: false
	});

1. load(): Load HTML From a Remote URL and Inject it into the DOM

The most common use of AJAX is for loading HTML from a remote location and injecting it into the DOM. With jQuery’s load() function, this task is a piece of cake. Review this demo and we’ll go over some uses one by one.

Minimal Configuration

Click on the first button named “load().” A piece of HTML is injected into the page, exactly what we were talking about. Let’s see what’s going on behind the scenes.

Below is the JavaScript code for this effect:

	$.ajaxSetup ({
		cache: false
	});
	var ajax_load = "<img src='img/load.gif' alt='loading...' />";
	
//	load() functions
	var loadUrl = "ajax/load.php";
	$("#load_basic").click(function(){
		$("#result").html(ajax_load).load(loadUrl);
	});
  1. $.ajaxSetup forces the browser NOT to cache AJAX calls.
  2. After the button is clicked, it takes a little while before the new HTML is loaded. During the loading time, it’s best to show an animation to provide the user with some feedback to ensure that the page is currently loading. The “ajax_load” variable contains the HTML of the loading sign.
  3. “ajax/load.php” is the url from which the HTML is grabbed.
  4. When the button is clicked, it makes an AJAX call to the url, receives the response HTML, and injects it into the DOM. The syntax is simply $(“#DOM”).load(url). Can’t be more straightforward, hah?

Now, let’s explore more details of the request with Firebug:

  1. Open Firebug.
  2. Switch to the “Net” tab. Enable it if it’s disabled. This is where all HTTP request in the browser window are displayed.
  3. Switch to “XHR” tab below “Net”. Remember the term “XHR?” It’s the request generated from an AJAX call. All requests are displayed here.
  4. Click on the “load()” button and you should see the following.

The request is displayed, right? Click on the little plus sign to the left of the request, more information is displayed.

Click on the “Params” tab. Here’s all parameters passed through the GET method. See the long number string passed under a “_” key? This is how jQuery makes sure the request is not cached. Every request has a different “_” parameter, so browsers consider each of them to be unique.

Click on the “Response” tab. Here’s the HTML response returned from the remote url.

Load Part of the Remote File

Click on “load() #DOM” button. We notice that only the Envato link is loaded this time. This is done with the following code:

	$("#load_dom").click(function(){
		$("#result")
			.html(ajax_load)
			.load(loadUrl + " #picture");
	});

With load(url + “#DOM”), only the contents within #DOM are injected into current page.

Pass Parameters Through the GET Method

Click on the “load() GET” button and open firebug.

	$("#load_get").click(function(){
		$("#result")
			.html(ajax_load)
			.load(loadUrl, "language=php&version=5");
	});

By passing a string as the second param of load(), these parameters are passed to the remote url in the GET method. In Firebug, these params are shown as follows:

Pass Parameters Through the POST Method

Click on the “load() POST” button and open Firebug.

	$("#load_post").click(function(){
		$("#result")
			.html(ajax_load)
			.load(loadUrl, {language: "php", version: 5});
	});

If parameters are passed as an object (rather than string), they are passed to the remote url in the POST method.

Do Something on AJAX Success

Click on “load() callback” button.

	$("#load_callback").click(function(){
		$("#result")
			.html(ajax_load)
			.load(loadUrl, null, function(responseText){
				alert("Response:\n" + responseText);
			});
	});

A function can be passed to load() as a callback. This function will be executed as soon as the AJAX request is completed successfully.

2. $.getJSON(): Retrieve JSON from a Remote Location

Now we’ll review the second AJAX method in jQuery.

JSON (JavaScript Object Notation) is a lightweight data-interchange format. It’s very convenient when exchanging data programmatically with JSON.

Let’s review an example.

Find the $.getJSON() section in the demo page, type in some words in your native language, and click detect language.

//	$.getJSON()
	var jsonUrl = "ajax/json.php";
	$("#getJSONForm").submit(function(){
		var q = $("#q").val();
		if (q.length == 0) {
			$("#q").focus();
		} else {
			$("#result").html(ajax_load);
			$.getJSON(
				jsonUrl,
				{q: q},
				function(json) {
					var result = "Language code is \"<strong>" + json.responseData.language + "\"";
					$("#result").html(result);
				}
			);
		}
		return false;
	});

Let’s jump to Line 9:

  1. $.getJSON doesn’t load information directly to the DOM. So the function is $.getJSON, NOT $(“#result”).getJSON. (There are pairs of similar looking functions in jQuery such as $.each() and each(). Check out their respective documentation for more information.)
  2. $.getJSON accepts three parameters. A url, parameters passed to the url and a callback function.
  3. $.getJSON passes parameters in GET method. POSTing is not possible with $.getJSON.
  4. $.getJSON treats response as JSON.

$.getJSON’s function name is NOT camel-cased. All four letters of “JSON” are in uppercase.

Look at the response in JSON format in Firebug. It’s returned from Google Translate API. Check out ajax/json.php in source files to see how language detection works.

3. $.getScript(): Load JavaScript from a Remote Location

We can load JavaScript files with $.getScript method. Click on “Load a Remote Script” button in the demo page; let’s review the code for this action.

//	$.getScript()
	var scriptUrl = "ajax/script.php";
	$("#getScript").click(function(){
		$("#result").html(ajax_load);
		$.getScript(scriptUrl, function(){
			$("#result").html("");
		});
	});
  1. $.getScript accepts only two parameters, a url, and a callback function.
  2. Neither the GET nor POST params can be passed to $.getScript. (Of course you can append GET params to the url.)
  3. JavaScript files don’t have to contain the “.js” extension. In this case, the remote url points to a PHP file. Let your imagination fly and you can dynamically generate JavaScript files with PHP.

See the response JavaScript in Firebug.

4. $.get(): Make GET Requests

$.get() is a more general-purpose way to make GET requests. It handles the response of many formats including xml, html, text, script, json, and jonsp. Click on the “$.get()” button in the demo page and see the code.

//	$.get()
	$("#get").click(function(){
		$("#result").html(ajax_load);
		$.get(
			loadUrl,
			{language: "php", version: 5},
			function(responseText){
				$("#result").html(responseText);
			},
			"html"
		);
	});
  1. $.get() is completely different, as compared to get(). The latter has nothing to do with AJAX at all.
  2. $.get accepts the response type as the last parameter, which makes it more powerful than the first functions we introduced today. Specify response type if it’s not html/text. Possible values are xml, html, text, script, json and jonsp.

5. $.post(): Make POST Requests

$.post() is a more general-purpose way to make POST requests. It does exactly the same job as $.get(), except for the fact that it makes a POST request instead.

//	$.post()
	$("#post").click(function(){
		$("#result").html(ajax_load);
		$.post(
			loadUrl,
			{language: "php", version: 5},
			function(responseText){
				$("#result").html(responseText);
			},
			"html"
		);
	});

The use of $.post() is the same as its brother, $.get(). Check the POST request in Firebug (shown in the following image).

Finally… $.ajax():

Up to this point, we’ve examined five commonly used jQuery AJAX functions. They bear different names but, behind the scenes, they generally do the exact same job with slightly different configurations. If you need maximum control over your requests, check out the $.ajax() function.

This is jQuery’s low-level AJAX implementation. See $.get, $.post etc. for higher-level abstractions that are often easier to understand and use, but don’t offer as much functionality (such as error callbacks). -jQuery’s official Documentation

In my opinion, the first five functions should satisfy most of our needs. But if you need to execute a function on AJAX error, $.ajax() is your only choice.

Conclusion

Today, we took an in-depth look of five ways to make AJAX calls with jQuery.

  • load(): Load a piece of html into a container DOM.
  • $.getJSON(): Load a JSON with GET method.
  • $.getScript(): Load a JavaScript.
  • $.get(): Use this if you want to make a GET call and play extensively with the response.
  • $.post(): Use this if you want to make a POST call and don’t want to load the response to some container DOM.
  • $.ajax(): Use this if you need to do something when XHR fails, or you need to specify ajax options (e.g. cache: true) on the fly.

Before we conclude, here’s a comparison table of these functions. I hope you enjoyed this lesson! Any thoughts?

Note: Want to add some source code? Type <pre><code> before it and </code></pre> after it. Find out more
  • Vadivel

    easy to understand. good

  • http://zachsmith.info Zach

    I am wondering how, for the plain load(), I would declare the URL inline rather than having it fixed in the script, so that I would be able to load different URLs for different buttons all with the same script. this seems simple enough, right?

  • Desheng

    Good post! Thank you!

  • Md Iftakhair

    Actually I have no speech How can i give thanks to net.tutsplus.com . It really a great learning side over the world. All the tutorials are very helpful . I am really pleased on this site.

  • Sara

    Thank you!! Very very helpful! :)

  • http://samer.eu.pn Samer

    I’m a developer for long time , i always need to find nice syntax every while , this is one of the best JQuery AJAX tutorials i ever read

  • Deborah

    That was fantastic. Clear, thorough, understandable and re-usable. Thank you for this unusually excellent tutorial. Where is the rating system so I can give it 5 stars?

  • Karthi

    Very Good post..

    I can see the $.post() and load() POST method returns 403 (Forbidden) status code. Can you take a look and explain us the reason.

  • jerry

    Best tutorial I’ve read on that topic!

  • Jeetendra

    Hi, I want to call external URL like “www.google.com” from any application then how it could be done ?

    thanks

    • Alex

      The best way to do that if make a “proxy” script on your server with php. You call you script with ajax and then the php script uses curl to get the website you want and return it to you. This bypasses the ajax limitation of same domain, same subdomain, and same port. If you need help with php just google curl script its pretty simple.

  • http://www.facebook.com/profile.php?id=679358973 Nikola Hamwi Abo Carla

    Excellent Tutorial…

  • http://www.MasterRenny.com/ Thomas Renshaw

    Is it possible to use text based links instead of buttons?

    • Tebitio

      Yes, just make sure to give them an id and to refer to that same id when attaching the events (such as ‘click’).

  • surya

    Hi, when i was trying to load the part of the remote file. i am getting entire page.. finally i got because of one space before the selector……… please make one note in your tutorial…

  • surya

    excellent post…… thx so much

  • pennwhite

    I’m sorry, but I’m confused about your instructions. I am trying to use method 1 to load another php file into a section of my web page.

    In your demo, I assume that when I click on the tabs in your horizontal nav bar the only thing that changes is the text and/or images in the righthand side of your display.

    I do not understand how to only change the php file in my div id “bodycontent” and leave the rest of my page untouched.

    Warm regards,

    Penn White

  • Albert

    That was an awesome post.

  • vaibhav

    need help
    i have an application which has header navigation menu , aside and footer all to be remain constant. I have a main div. Now what i need is, when a user clicks any menu on navigation bar, earlier he used to get redirected to corresponding jsp but now i need to load that jsp into my main div. How can i achieve this. please help.

  • tickleman

    Another new way to make ajax calls is to use the jquery.xtarget plugin and to define ajax calls inside your HTML code like this :

    <a href=”callwhat.html” target=”#where”>download content</a>

    Documentation and download here :
    https://github.com/bapplistudio/jquery.xtarget

  • coder

    visit : http://erabhinavrana.blogspot.in/ for short totutorials

  • http://www.facebook.com/oluwaseye Oluwaseye Hiroshi Ogunkoya

    Nice Post…

  • Sagar Raut

    Thanks You So Much!!!!!!!

  • http://twitter.com/ClickWhisperer Click Whisperer

    Thank you for this summary of different methods. I often struggle with the idea that there’s some hidden, undocumented aspect that makes one tactic more ideal than another. Thanks again!

  • Prateek Saini

    Awesome tutorial. Something which I was looking for :)
    You guys save us :D

  • http://www.facebook.com/joseaquino96 Jose Aquino

    Amazing article/tutorial, my mind has been untangled from many doubts about AJAX requests, if you want to perform AJAX request in your code this is a MUST read before coding anything!! Thanks!