$.ajax({
url : uri,
type : 'post',
data : {someBooleanVar1: false, subVar: {someBooleanVar2: true}}
});
问题在于服务器上的someBooleanVar1和someBooleanVar2将被接收为字符串"false"和"true",而不是"0"和"1"。是否有任何方法可以自动将布尔参数转换为"1"和"0"?
$.ajax({
url : uri,
type : 'post',
data : {someBooleanVar1: false, subVar: {someBooleanVar2: true}}
});
问题在于服务器上的someBooleanVar1和someBooleanVar2将被接收为字符串"false"和"true",而不是"0"和"1"。是否有任何方法可以自动将布尔参数转换为"1"和"0"?
有一个固定版本的@jcubic答案:
function convertBoolToNum(obj) {
$.each(obj, function(i) {
if (typeof obj[i] == 'object') {
convertBoolToNum(this);
}
else if (typeof obj[i] == 'boolean') {
obj[i] = Number(obj[i]);
}
});
}
$.ajax = (function($ajax) {
return function(options) {
convertBoolToNum(options.data);
return $ajax(options);
};
})($.ajax);
试试这个,它应该会自动将布尔值转换为数据选项中的数字。
$.ajax = (function($ajax) {
return function(options) {
if (options.data != undefined) {
for (var i in options.data) {
if (options.data.hasOwnProperty(i) &&
(typeof options.data[i] == "boolean")) {
options.data[i] = Number(options.data[i]);
}
}
}
return $ajax(options);
};
})($.ajax);
我知道这篇文章有点旧,但我仍然想传递这个信息^^ 我将变量传递到PHP并使用以下代码捕获:
filter_var($var, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE);
true=1
和false=
在php中,false作为字符串为空。也许我理解问题有误。但这是我所理解的 :)
使用上述代码,您可以轻松构建一个函数并添加更多过滤器,以使所有内容按照您的意愿工作 :)虽然不是真正的自动,但添加0将把布尔值转换为0或1:
data : {someBooleanVar1: false + 0, someBooleanVar2: true + 0}
+
是将其强制转换为 Number
的常用方法;将 !!
附加以进行 Boolean
强制转换。JavaScript 源代码需要通过互联网传输,因此简洁性很重要。 - Yi Jiangfunction convertBoolToNum( obj ) {
$.each( obj, function( i ) {
if ( typeof obj[i] == 'object' ) {
convertBoolToNum(this);
}
else if ( typeof obj[i] == 'boolean' ) {
obj[i] = Number( obj[i] );
}
} );
}
$.ajax = ( function( $ajax ) {
return function( options ) {
if ( _.has( options, 'data' ) ) {
convertBoolToNum( options.data );
}
return $ajax( options );
};
} )( $.ajax );
$.ajax = (function($ajax) {
return function(options) {
(function (obj) {
var _fn = arguments.callee;
$.each(obj, function(i) {
if (typeof obj[i] == 'object') {
_fn(this);
} else if (typeof obj[i] == 'boolean') {
obj[i] = ~~obj[i];
}
})
})(options.data || {});
return $ajax(options);
};
})($.ajax);