我正在通过JavaScript将数据发送到服务器用于REST API(这将在PhoneGap应用程序中,因此使用jQuery而不是任何服务器代码)。我正在构建自己的API,所以我有灵活的选项,但我想知道是否有一种首选的方法来处理POST数据。我使用JSON作为GET,所以我应该将它用于POST吗?
发送它的更好方法是什么?
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
}
});
});
答案 0 :(得分:2)
你的第二个例子几乎完成了$.ajax
和.serialize()
在内部所做的事情,并且POST数据总是以字符串的形式发送,所以它不应该是这样或那样的。第一个例子看起来更干净,更容易阅读,所以这是一个优势。
答案 1 :(得分:2)
创建一个空数组,继续将各个表单字段推送到数组,JSON.stringify数组,然后通过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对象中使用'key':'value'对来手动获取服务器上每个字段的值。
答案 2 :(得分:1)
在你的问题中,你没有用“更好的方式”来指明你的意思,所以也许你应该编辑你的问题来澄清这一点。例如,您是否特别关注性能,内存使用情况,等。?
然而,从一般意义上讲,我会说更好的方法来做这类事情就是采用你觉得更容易阅读的方法,因为这种方法更容易调试,扩展和修改随着时间的推移。仅查看客户端代码,您的第一种方法似乎更容易阅读,但如果您负责服务器端,您也应该考虑这一点。采用您认为更容易维护的方法整体。
最后,您没有在问题中指出是否要发布REST API以供其他人使用,但如果您是,那么最重要的因素实际上是阅读和理解API的难易程度。通过这种方法,您可能应该在GET和POST中使用JSON。