如何发送json字符串而不是url字符串

时间:2015-08-24 09:03:51

标签: javascript jquery json

<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":"

我的问题是:

  1. 我该怎么办?
  2. 有什么区别?

2 个答案:

答案 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人。

希望有所帮助