Reputation: 27038
update: I would like to pass the var value
to the server
hello, 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.
Upvotes: 221
Views: 437717
Reputation: 47
Post async function with event.
//---------------------Buffers <0-9>---------------------
var gBuffer=[];
function GetBuffer(pIndex=0) {
if (pIndex<0 || pIndex>9) {
console.log('Error, pIndex out of interval <0,9>');
return null;
}
if (gBuffer.length<10) {gBuffer.length=10;}
return gBuffer[pIndex];
}
function SetBuffer(pIndex=0, pJson="") {
if (pIndex>=10 || pIndex<0) {
console.log('Error, pIndex out of interval <0,9>');
return null;
}
if (gBuffer.length<10) {gBuffer.length=10;}
return gBuffer[pIndex]=pJson;
}
//---------------------Post and generate event---------------------
function sleep(ms=3) {
return new Promise(resolve => setTimeout(resolve, ms));
}
async function gWait(pIndex=0, pTimeoutSec=10, pEventTag="html", pEventName="PostEvent" ) { // async, generate event
if (pIndex<0 || pIndex>9) {
console.log('Error, pIndex out of interval <0,9>');
return;
}
var i=0;
console.log('gWait start');
while (i < 25*pTimeoutSec && GetBuffer(pIndex)==null) {
await sleep(40);
i++;
}
if (i>=25*pTimeoutSec) {
SetBuffer(pIndex,'{"error":"SRV error. Fetch timeout ('+pTimeoutSec+' sec)"}');
}
console.log('gWait stop, iteration:'+i+'/'+25*pTimeoutSec);
$(pEventTag).trigger(pEventName,pIndex); //generate event
}
async function Post(pJSON="", pIndex=0, pTimeoutSec=10, pEventTag="html", pEventName="PostEvent") { //send JSON and return response to gArray[pIndex]
if (pIndex<0 || pIndex>9) {
console.log('Error, pIndex out of interval <0,9>');
return;
}
var js=Trim(pJSON);
if (js=="") { js="{}"; } //empty JSON
SetBuffer(pIndex,null);
try {
if (pTimeoutSec>0) {gWait(pIndex,pTimeoutSec,pEventTag,pEventName);} //timeout controll, and generate event
var resp=await fetch("ajax", //url to server example: "http://localhost:8081/api/services/tags/"
{ method: "POST",
headers: {"Content-Type": "application/json; charset=utf-8" },
body: js,
async: true,
})
if (resp.status==200) {
const result= await resp.json();
SetBuffer(pIndex,JSON.stringify(result));
} else {
SetBuffer(pIndex,'{"error":"SRV error. '+resp.status+'"}');
}
}
catch (err) {
SetBuffer(pIndex,'{"error":"SRV error. Failed to fetch."}');
}
if (pTimeoutSec<=0) { $(pEventTag).trigger(pEventName,pIndex);} //generate event
}
$(document).ready(function(){
alert('ok');
$("html").on("PostEvent", function(event,msg){
console.log(event.type+' gBuffer['+msg+']:'+GetBuffer(msg));
});
$("form").submit(function (event) {
event.preventDefault();
Post('{"hello":""}'); //JSON post
event.preventDefault();
});
});
Upvotes: -2
Reputation: 8915
'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
Upvotes: 252
Reputation: 4062
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.
Upvotes: 2
Reputation: 6762
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
Upvotes: 296