jQuery posting JSON
Solution 1
'data' should be a stringified JavaScript object:
data: JSON.stringify({ "userName": userName, "password" : password })
To send your formData
, pass it to stringify
:
data: JSON.stringify(formData)
Some servers also require the application/json
content type header:
contentType: 'application/json'
There's also a more detailed answer to a similar question here: Jquery Ajax Posting JSON to webservice
Solution 2
You post JSON like this
$.ajax(url, {
data : JSON.stringify(myJSObject),
contentType : 'application/json',
type : 'POST',
...
if you pass an object as settings.data jQuery will convert it to query parameters and by default send with the data type application/x-www-form-urlencoded; charset=UTF-8, probably not what you want
Solution 3
In case you are sending this post request to a cross domain, you should check out this link.
https://stackoverflow.com/a/1320708/969984
Your server is not accepting the cross site post request. So the server configuration needs to be changed to allow cross site requests.
Related videos on Youtube
Comments
-
Patrioticcow almost 2 years
update: I would like to pass the
var value
to the serverhello, same old, same old ... :)
I have a form called
<form id="testForm" action="javascript:test()">
and a code area called<code id="testArea"></code>
I am using this code to stringify and display the data in the code area:
var formData = form2object('testForm'); document.getElementById('testArea').innerHTML = JSON.stringify(formData, null, '\t'); var value = JSON.stringify(formData, null, '\t');
What I want is to send this data to a JSON file. I've been working on this project : http://ridegrab.com/profile_old/ and if you press
Submit Query
button you will see the head of the page populate.Also I want use this piece of script to send data:
function authenticate(userName, password) { $.ajax ({ type: "POST", //the url where you want to sent the userName and password to url: 'username:password@link to the server/update', dataType: 'json', async: false, //json object to sent to the authentication url data: '{"userName": "' + userName + '", "password" : "' + password + '"}', success: function () { alert("Thanks!"); } }) }
Again, all I want is to be able to send that JSON data to the server. My server is set up to
update or POST
the data in the right place.-
Patrioticcow about 13 yearsi can't make it work :) i don't know how to put them together to send that data to the server... even if i replace
data
withdata: value,
...!!?? -
Wiseguy about 13 yearsFirstly, are you certain it's not a connection issue? If you assign an
error
function, does it get called? If so, with what error? -
vbullinger over 11 yearsThough it's over a year old, I'll answer @Patrioticcow's latest question about how to do that. You see the "success" option that you sent into the ajax method? Do the same thing with "error." As in "error: MyErrorHandlingFunction" or "error: function(error) { [Error handling code here] }"
-
-
Kyle Wild over 11 years@tasos I think this is what you're after: stackoverflow.com/questions/5806971/…
-
FMM over 11 yearsEchoing the incorrectness here; this will work OK for simple scenarios, but the url-encoded message can be very problematic, especially for arrays of stuff.
-
Kyle Wild over 11 years@FMM and Jonas N - Can you guys help me figure out how to update my answer for correctness? The examples in the jQuery docs (here: api.jquery.com/jQuery.post) make it appear as though you can post either a JS object or a string, which led me to believe that jQuery would handle all of the necessary string serialization.
-
andsens over 11 yearsPatrioticcow said: "what if i want to send the json from var value" Unless the value is an array or an object this is not valid JSON.
-
FMM over 11 yearsConsider what happens when your data contains, for instance, a list of things:
{ foo: [1,2,3], bar: 'baz' }
. This will get form-encoded asfoo%5B%5D=1&foo%5B%5D=2&foo%5B%5D=3&bar=baz
(unescaped, it'sfoo[]=1&foo[]=2&foo[]=3&bar=baz
). Likely not what you want server-side. -
Haroldo_OK over 6 yearsThat won't quite work if you want to post JSON to a REST service, because jQuery will be posting the content as 'application/x-www-form-urlencoded; charset=UTF-8', while most REST services would be expecting 'application/json'; @teknopaul's answer would work much better in that case.
-
Phil over 6 years@TimLovell-Smith won't make a difference as jQuery won't process a
data
string in any case -
ccpizza almost 2 yearsA "stringified JavaScript object" is a plain String object