Submitting jQuery.ajax data with string containing "???" it changes value to "jQuery19107363727174233645_1373301489648?"

ajax, jquery, json

Solution

If I read through the comments of the bugs in the other answers, the real problem lies in the fact that you stringify your json-string before passing it to `data`. `data` expects either a `String` containing a query (e.g. `"a=asdf&b=qwer"` or an `Object` containing the keys and values that it will turn into a query). You are instead passing something like `'{"a":"asdf","b":"qwer"}'`, a `String` containing a stringified array that is not a query. It somehow manages to convert in data the server understands, but apparently triggers that bug/feature too.

Solution 1

If you want to access the data via `$_POST['a']` to get key `"a"` in your JSON-object:

$.ajax( {
    async: false,
    data: model, //Pass the Array itself to the function
    dataType: "json",
    type: "post",
    url: serverSideURL
});

(Source; Cowboy on jQuery bugs)

Solution 2

If you want to retrieve the JSON-string:

$.ajax( {
    async: false,
    data: {
      "MyLilString": JSON.stringify( model )
    }
    dataType: "json",
    type: "post",
    url: serverSideURL
});

In this case `$_POST["MyLilString"]` contains the serialized JSON, which you can use `json_decode()` on.

(Source; Ajpiano on jQuery bugs)

Another sugestion

Another suggestion I did extract from the comments (but I am now unable to find -_-') is to set `jsonp` to `false`.

$.ajax( {
    async: false,
    data: model
    dataType: "json",
    type: "post",
    url: serverSideURL,
    jsonp: false
});

This should stop jQuery from inserting the callback function into the request body too.

Problem

Page side javascript: ``` var model = {"NumberOfCPUs":"2","NumberOfCores":"4","OSType":"Linux","OSVersion":"???"}; var id = 0; var success = false; //send to server: $.ajax( { async: false, data: JSON.stringify(model), dataType: "json", type: "post", url: serverSideURL }); ``` The contents of the request that actually gets sent to the server: ``` {"NumberOfCPUs":"2","NumberOfCores":"4","OSType":"Linux","OSVersion":"jQuery19107363727174233645_1373301489648?"} ``` What is happening? Is the string "???" some sort of special control word or something in jQuery? Thanks.

Original source