2015-08-24 89 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