The Missing Parameter of jQuery.post

When coding JavaScript that requires a lot of DOM manipulations, jQuery no doubt is my favorite JavaScript framework. Surprisingly, with file size of 26KB (packed distribution), it supports Ajax along with many other handy features.

If you've previously used jQuery's Ajax API, you probably noticed that there's a jQuery.getJSON() function call that grabs the server response from a given URL and parses it into a JSON object. However, you couldn't find the corresponding method from online documentation for post request, namely jQuery.postJSON.

I know that I can do "postJSON" with jQuery.ajax or simply use eval() function to parse the returned response, but I am not satisfied with either of them. As being fastidious, I want to have something that is as elegant as getJSON(). After spending some time on the source code, I finally found some workaround that I can live with. It turns out that the online documentation of jQuery is a little bit outdated because it shows jQuery.post only accept three parameters: jQuery.post( url, [data], [callback] , in fact jQuery.post accepts a fourth parameter which is the data type. That means I can do something like:

Indeed, jQuery.get takes a fourth parameter as well:

and jQuery.getJSON is simply a jQuery.get with the fourth parameter as "json":

Hopefully jQuery team can update their documentation soon, as it causes unnecessary confusions.

8 Comments The Missing Parameter of jQuery.post

  1. Vaviloff

    Many thanks to this note, came in very handy at the first place when I typed "jquery post callback json" into Google.

  2. chief

    Many, many thanks for this note. I have been pulling my hair out for about an hour trying to figure out why I couldn't get $.post to recognize my JSON result. I hope they update their documentation soon.

  3. Foo Bar

    I couldn't get $.post to recognize my JSON result and so this note literally saved my life.

    Much thanks. :3

  4. Pul

    In fact, jQuery.get and jQuery.post are both (like getJSON) functions of 1 rule:
    return jQuery.ajax({ "POST"/"GET", ... });

  5. Matt

    Thank you for this post! It turns out that Internet Explorer (IE7) caches results obtained from GET but not POST. I couldn't figure out why it was not returning the right result. After making this change, everything works great.

Comments are closed.