$.ajax({
url : uri,
type : 'post',
data : {someBooleanVar1: false, subVar: {someBooleanVar2: true}}
});
问题是在服务器上someBooleanVar1和someBooleanVar2将作为字符串“false”和“true”接收,但不会作为“0”和“1”接收。有没有办法自动将布尔参数转换为“1”和“0”?
答案 0 :(得分:2)
有一个固定版本的@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);
答案 1 :(得分:1)
试试这个,它应该自动将布尔值转换为数据选项中的数字。
$.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);
答案 2 :(得分:1)
我知道这篇文章有点旧但我还是想传递这个信息^^ 我将vars传递给php并用以下方式捕获它们:
filter_var($var, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE);
像这样我将字符串变为布尔值 true=1
和 false=
false,因为字符串在php中是空的
也许我读错了这个问题。但这就是我所理解的:) 使用上面的代码,您可以轻松构建一个函数并添加更多过滤器,以使所有内容按您的需要工作:)
答案 3 :(得分:0)
不是真的自动但添加0会将布尔值转换为0或1:
data : {someBooleanVar1: false + 0, someBooleanVar2: true + 0}
答案 4 :(得分:0)
这是对易江答案的解决方法。如果您调用ajax并且没有数据集,则会出错。在转换布尔值之前添加了一个测试,以查看是否设置了data属性。我使用下划线,随意用原生的js函数hasownprop交换出来......
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 ) {
if ( _.has( options, 'data' ) ) {
convertBoolToNum( options.data );
}
return $ajax( options );
};
} )( $.ajax );
答案 5 :(得分:0)
这是一个更优化的版本,它不会污染全局命名空间,递归转换值,处理潜在的未定义数据属性,并使用正确的方法将布尔值转换为相应的整数值。
$.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);
我仍然认为,在发送请求之前,jQuery不会在内部执行这一点,这令人非常震惊。