jQuery - How to PUT JSON via Ajax?

JqueryAjaxJson

Jquery Problem Overview


I am trying to put some JSON formatted data via Ajax with jQuery to a server. My code looks like this:

$.ajax({
    type: "PUT",
    url: myURL,
    contentType: "application/json",
    data: {"data": "mydata"}
});

But on the server-side, I receive a data=mydata string, instead of the expected JSON. Firebug tells me the same.

Where is the error?

Jquery Solutions


Solution 1 - Jquery

I think the data needs to be a String. Objects are converted to query strings which is what you are seeing here.

You can use the JSON.stringify(obj) method to convert your Object to a String. The code for the JSON object is available from: https://github.com/douglascrockford/JSON-js/blob/master/json2.js.

Alternately, just pass the code you are using to create the object as a literal String, but I imagine this is just an example and you'll want to encode some object you've already created.

Solution 2 - Jquery

If you always have to send JSON in your application, then you can just execute this somewhere in your init and then use default $.ajax call as in your example, and it will always serialize as a JSON string instead of the Ajax default query string.

Here I use the JSON object mentioned above:

$.ajaxSetup({
    contentType : 'application/json',
    processData : false
});
$.ajaxPrefilter( function( options, originalOptions, jqXHR ) {
    if (options.data){
        options.data=JSON.stringify(options.data);
    }
});

Solution 3 - Jquery

//url: this is a reference to the XML, where you need to define the mapping.
//<entry key="/getEmpDetails/transEfileGenerate.app">
//<bean class="com.adp.ems.framework.spring.MappingItem" p:delegate-ref="efilePageDelegate"
//p:action="passJSONObjectAndGetWebServiceOutput" />

//str1 is the input JSON that you need to pass... Ajax will automatically take care to get the response.
//</entry>

var kw = {
    url : "getEmpDetails/transEfileGenerate.app",
    timeout : 30000,
    handleAs : "json",
    sync: false,
    putData : str1,
    headers: { "Content-Type": "application/json"},
    load : function(result) {
},

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionJuri GlassView Question on Stackoverflow
Solution 1 - JqueryAndyView Answer on Stackoverflow
Solution 2 - JqueryDmytroView Answer on Stackoverflow
Solution 3 - JqueryNehaView Answer on Stackoverflow