将数据发送为序列化vs json

时间:2013-02-17 14:30:53

标签: javascript jquery json

我正在通过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
        }   
    });

});

3 个答案:

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