2013-02-17 60 views
2

我通過JavaScript爲一個REST API將數據發送到服務器(這將是內部的PhoneGap的應用,因此使用jQuery而不是任何服務器代碼)發送數據。我正在構建自己的API,因此我有靈活的選項,但是我想知道是否有一種首選的方式來處理POST數據。我使用JSON作爲GET,所以我應該將它用於POST嗎?系列化VS JSON

有什麼更好的方式來發送?

1)使用serialize方法,然後將其發送作爲數據,例如

$('form').submit(function(e){ 

    e.preventDefault(); 

    var form = $(this); 

    $.ajax({ 
     type: 'POST', 
     url: form.attr('action'), 
     data: form.serialize(), 
     success: function(response){ 
      // handle response 
     }, 
     error: function(a,b,c) { 
      // handle error 
     } 
    }); 

}); 

或2)將它作爲一個JSON對象,如:

$.fn.serializeObject = function() 
{ 
    var o = {}; 
    var a = this.serializeArray(); 
    $.each(a, function() { 
     if (o[this.name] !== undefined) { 
      if (!o[this.name].push) { 
       o[this.name] = [o[this.name]]; 
      } 
      o[this.name].push(this.value || ''); 
     } else { 
      o[this.name] = this.value || ''; 
     } 
    }); 
    return o; 
}; 

$('form').submit(function(e){ 

    e.preventDefault(); 

    var form = $(this); 

    $.ajax({ 
     type: 'POST', 
     url: form.attr('action'), 
     data: JSON.stringify(form.serializeObject()), 
     success: function(response){ 
      // handle response 
     }, 
     error: function(a,b,c) { 
      // handle error 
     } 
    }); 

}); 

回答

1

在你的問題,你沒有指定你的意思是什麼「更好的方式」,那麼也許你應該修改你的問題澄清。例如,你特別是與性能,內存使用情況,有關?

但是,從一般意義上講,我認爲更好的方法來做這種事情是使用易於閱讀的方法,因爲這種方法將更容易調試,擴展和隨着時間的推移而修改。只看客戶端代碼,你的第一種方法似乎更容易閱讀,但如果你對服務器端負責,你也應該考慮這一點。一起去,你覺得會更容易保持整體的辦法。

最後,在你的問題中,你是不是表示你是否要發佈REST API供其他人使用,但如果你是這樣,那麼最重要的因素實際上是閱讀和理解API的多麼容易。通過這個衡量標準,你應該在你的GET和POST中使用JSON。

2

你的第二個例子確實差不多就是$.ajax.serialize()內部完成,而POST數據總是被當作字符串發送無論如何,所以它不應該是一種或另一種方式。第一個例子看起來更清晰易讀,所以這是一個優勢。

+0

最重要的是,後者增加了一個額外的反序列化步驟到整個請求處理 – Alexander 2013-02-17 14:37:27

2

創建一個空數組,繼續將單個表單字段推送到數組,JSON.string化數組,並通過POST發送它。

var formData = []; 
//Push individual form elements to this aray, preferably in a "key" : "value" format. 
var payload = JSON.stringify(formData); 
//Then just send it to the server. 

好部分用JSON對象是,你可以從各種服務器端語言的閱讀,沒有任何努力..

另外,你甚至可以用「鑰匙」:「值」在JSON對象內部配對以手動獲取服務器上每個字段的值。