注意:我已经看到很多关于此的问题,但每个都给出了一个略有不同的答案,我想知道什么是规范或最佳实践,因为答案不同。他们都不清楚为什么会有差异,或何时使用其中一个。有些刚刚过时。
Jquery版本1.8.0,示例使用coffeescript。
我有一个包含数据的表单,点击提交获取数据的方式并根据我读过的内容发布它是三件事之一:(如果下面的示例中有未声明的变量,请假设他们已被分配到其他地方)
1:
data = $.param(form.serializeArray())
$.ajax( url, {
headers: {
Accept : "application/json",
"Content-Type": "application/json"
},
dataType: "json",
type: "POST",
data: data,
posting jquery .serializeArray(); output through ajax
2。与(1)相同,除了这一行:
data = JSON.stringify(form.serializeArray())
Send post form data in json format via ajax with JQuery dynamically
3。与(1)相同,除了这一行:
data = form.serialize()
http://api.jquery.com/jQuery.post/#example-3
This may explain为什么使用$.param
会更好,但它是关于jQuery 1.4的旧帖子。
答案 0 :(得分:0)
这是来自(http://jquery.com/)版本1.8.2的jquery源代码,用于在ajax调用之前构建params
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 );
}
}
从列出的代码中,您可以看到上面列出的所有“方式”都是在上面列出的函数中处理params的过程中处理的,最后是相同的字符串化版本