<form id="msform" action="AN HTTP to AGENT" method="post">
如果我发布这些表单,它会将json发送到服务:
$("#msform").submit(function(){
// construct an HTTP request
var xhr = new XMLHttpRequest();
xhr.open(form.method, form.action, true);
xhr.setRequestHeader('Content-Type', 'application/json; charset=UTF-8');
// send the collected data as JSON
xhr.send(JSON.stringify($('#msform').serializeObject()));
xhr.onloadend = function () {
// done
};
});
但在我的数据库中,我会看到这个信息:
customerName=a&email=asd%40asd.com&phoneNumber=a&orderReference=a&item1=&amount1=&item2=&amount2=&item3
我最终想要像这样保存它:
{"customerName":"asd@asd.com","email":"asd@asd.com",
"phoneNumber":"asd@asd.com","orderReference":"
我的问题是:
答案 0 :(得分:0)
你可以使用包装器对象来放置你的所有数据吗?所以我们可以在发送之前对日期进行url编码,然后没有数据丢失
data = $('#msform').serializeObject();
var res = encodeURI(JSON.stringify(data));
var wrapper = new Object();
wrapper.content = res;
xhr.send(JSON.stringify(wrapper));
在服务器端: 1)将包装器中的数据作为GET变量获取。 2)解码网址 3)现在你有了JSON数据
答案 1 :(得分:0)
这是违规行,或者说是你误解的原因
// send the collected data as JSON
xhr.send(JSON.stringify($('#msform').serializeObject()));
在jquery中序列化表单时,您将包含输入字段转换为get query参数,这就是您要发送到数据库的内容。要将它转换为可以在Ajax调用中使用的jSON对象,您可以简单地执行类似这样的操作。
var data = $('#msForm').serialize();
function objectify(data){
var finalObj = {}
var result = data.split('&').map(function(stringObj){
var objectForm = {};
var pair = stringObj.split("=");
objectForm[pair[0]] = pair[1];
return objectForm
})
result.forEach(function(obj){
for(var prop in obj){
finalObj[prop] = obj[prop]
}
})
return finalObj
}
然后只需JSON.stringify通过调用&#34; objectify&#34;返回的结果。但我确信有很多图书馆可以很好地完成这项工作。我不是一个huje jquery人。
希望有所帮助