2015-08-24 90 views
0
<form id="msform" action="AN HTTP to AGENT" method="post"> 

如果我发布这些形式发送JSON的服务:如何发送JSON字符串,而不是URL字符串

$("#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":"[email protected]","email":"[email protected]", 
    "phoneNumber":"[email protected]","orderReference":" 

我的问题是:

  1. 我该怎么做?
  2. 区别是什么?
+0

这是你的实际网址? 'action =“HTTP to AGENT”' –

+0

没有它的一个真正的http,但我想保持私有 – YdB

回答

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)解码URL 3)现在你有JSON数据

+0

我现在已经完成:\t

var xhr = new XMLHttpRequest(); xhr.open(form.method,form.action,true); xhr.setRequestHeader('Content-Type','application/json; charset = UTF-8'); data = $('#msform')。serializeObject(); var res = encodeURI(JSON.stringify(data)); xhr.send({wrapper:res}); //将收集的数据发送为JSON //xhr.send(JSON.stringify($('#msform')。serializeObject())); xhr.onloadend = function(){ // done }; – YdB

+0

现在我得到:错误400 HTTP Web服务器:未知的命令异常 – YdB

+0

我已经改变了代码,PLZ检查,看看你得到而不是这些customerName = a&email = asd%40asd.com&phoneNumber = a&orderReference = a&item1 =&amount1 = &ITEM2 =&AMO​​UNT2 =&项目3。它应该是数据= <一些炒编网址编码数据> – Vilvan

0

这是有问题的线路或者说你误解的原因

// send the collected data as JSON 
    xhr.send(JSON.stringify($('#msform').serializeObject())); 
时序列化在jQuery的形式

你打开包含输入字段到获取查询参数,这就是你发送到你的数据库。要将其转换为您可以在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通过调用“objectify”返回的结果。但我相信有很多图书馆可以做得很好。我不是一个huje jquery的人。

希望可以帮到

+0

对不起,我已经有一个函数: $ .fn.serializeObject = function() { var o = {}; var a = this.serializeArray(); (o [this.name]!== undefined){!o [this.name] .push} {[this.name] = [o [this.name]] } o [this.name] .push(this.value ||' }); return o; }; – YdB