通过Jquery'发布表单数据的3种方法;将ajax函数发送到接受JSON的路由

通过Jquery'发布表单数据的3种方法;将ajax函数发送到接受JSON的路由,ajax,jquery,Ajax,Jquery,注意:我已经看到了很多关于这方面的问题,但是每个问题都给出了一个稍微不同的答案,我想知道什么是规范或最佳实践,因为答案不同。他们都不清楚为什么会有差异,或者何时使用其中一个。有些已经过时了 Jquery版本1.8.0,示例使用coffeescript 我有一个包含数据的表单,根据我所读的内容,单击提交获取数据并发布的方法是三件事之一:(如果下面的示例中有未声明的变量,请假设它们已分配到其他地方) 1: 二,。与(1)相同,但此行除外: data = JSON.stringify(form.se

注意:我已经看到了很多关于这方面的问题,但是每个问题都给出了一个稍微不同的答案,我想知道什么是规范或最佳实践,因为答案不同。他们都不清楚为什么会有差异,或者何时使用其中一个。有些已经过时了

Jquery版本1.8.0,示例使用coffeescript

我有一个包含数据的表单,根据我所读的内容,单击提交获取数据并发布的方法是三件事之一:(如果下面的示例中有未声明的变量,请假设它们已分配到其他地方)

1:

二,。与(1)相同,但此行除外:

data = JSON.stringify(form.serializeArray())
data = form.serialize()

三,。与(1)相同,但此行除外:

data = JSON.stringify(form.serializeArray())
data = form.serialize()


为什么使用
$.param更好,但这是一篇关于jQuery 1.4的老文章。

这是来自(http://jquery.com/)版本1.8.2,用于在ajax调用之前构建参数


function buildParams( prefix, obj, traditional, add ) {
    var name;

    if ( jQuery.isArray( obj ) ) {
        // Serialize array item.
        jQuery.each( obj, function( i, v ) {
            if ( traditional || rbracket.test( prefix ) ) {
                // Treat each array item as a scalar.
                add( prefix, v );

            } else {
                // If array item is non-scalar (array or object), encode its
                // numeric index to resolve deserialization ambiguity issues.
                // Note that rack (as of 1.0.0) can't currently deserialize
                // nested arrays properly, and attempting to do so may cause
                // a server error. Possible fixes are to modify rack's
                // deserialization algorithm or to provide an option or flag
                // to force array serialization to be shallow.
                buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add );
            }
        });

    } else if ( !traditional && jQuery.type( obj ) === "object" ) {
        // Serialize object item.
        for ( name in obj ) {
            buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
        }

    } else {
        // Serialize scalar item.
        add( prefix, obj );
    }
}

从列出的代码中,您可以看到,您上面列出的所有“方式”都是在上述函数中的参数处理中处理的,并以相同的字符串化版本结束

这些引号表示我们将在2012年12月被太空外星人入侵,您应该尽快采取预防措施