$.ajax({
url : uri,
type : 'post',
data : {someBooleanVar1: false, subVar: {someBooleanVar2: true}}
});
的问题是,在服务器someBooleanVar1和someBooleanVar2将被接收为字符串“假”和“真”,但不为“0”和“1”。有没有办法自动将布尔变量转换为“1”和“0”?jQuery.ajax()和发送请求的布尔参数
$.ajax({
url : uri,
type : 'post',
data : {someBooleanVar1: false, subVar: {someBooleanVar2: true}}
});
的问题是,在服务器someBooleanVar1和someBooleanVar2将被接收为字符串“假”和“真”,但不为“0”和“1”。有没有办法自动将布尔变量转换为“1”和“0”?jQuery.ajax()和发送请求的布尔参数
有@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);
不是真的自动但是增加0将布尔转换为0或1:
data : {someBooleanVar1: false + 0, someBooleanVar2: true + 0}
试试这个,它会自动布尔值转换为数字数据的选项。
$.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);
这是姜毅的回答修复。如果你调用ajax并没有设置数据,它会给出错误。在转换布尔值之前添加了一个测试以查看数据属性是否已设置。我用下划线,请随时与本机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);
我知道这个帖子是有点老,但我还是想通过这个信息^^ 我通过增值经销商到PHP并赶上他们:
filter_var($var, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE);
这样我把字符串转换为布尔true=1
和false=
假的串是在PHP
也许我读错了问题。但这是我明白:) 与上面的代码,你可以轻松地建立一个功能,并添加更多的过滤器,让一切工作,因为你想:)
这是一个更优化的版本,不污染全局命名空间,递归地转换值,照顾未定义的数据数据属性,并使用适当的方法将布尔值转换为它们相应的整数值。
$.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内部执行发送请求之前。
所以我需要每次都传递一些可以是布尔值的参数来做到这一点?不用了,谢谢! – barbushin 2011-02-08 13:36:25
@Senior你期待什么?某种全局JS设置会导致布尔变成1或0? – 2011-02-08 13:48:04