tags:

views:

558

answers:

2

Is there really a difference in these two calls? If you use getJSON, you still have to declare format=json in the url...

And you can do the same in $.get(), and iterate through the JSON-object.

Or am I way off here?

+2  A: 

I think the documentation explains it quite clearly!

http://docs.jquery.com/Ajax/jQuery.get#urldatacallbacktype

Load a remote page using an HTTP GET request.

http://docs.jquery.com/Ajax/jQuery.getJSON#urldatacallback

Load JSON data using an HTTP GET request.

Remember, these are just abstractions of the .ajax method

ScottE
But one can still use $.get to recieve JSON data, right? If the page you're calling returns a JSON-object?
peirix
Sure, I suppose, as long as you specify the 'data' argument as json. If the page is going to return json, why not just use the getJSON method? Again, these are just abstractions to simplify ajax calls, from the base .ajax method. They are there to make things easier for you, not to complicate!
ScottE
+5  A: 

The following two snippets are equivalent:

$.get("/some/url", {data: "value"}, function(json) { 
  // use json here
}, "json")

$.getJSON("/some/url", {data: "value"}, function(json) {
  // use json here
});

Saying that a request is for JSON means two things:

  • jQuery sends an Accept: application/json header
  • jQuery interprets the inbound response, converts it into a JavaScript Object, and passes it into the callback (so you don't have to mess with eval or other conversion mechanism).

A number of server-side frameworks (such as Rails) automatically detect the Accept header and handle the request appropriately. If you are using a different framework or rolling your own, you can inspect the Accept header to detect the format (instead of inspecting the parameters).

Yehuda Katz
I should also point out that the reason the Accept header solution was added was to cater to frameworks that handle it gracefully, making the communication between jQuery and such frameworks (e.g. Rails) seamless.
Yehuda Katz