2011-02-08 88 views
7
$.ajax({ 
    url : uri, 
    type : 'post', 
    data : {someBooleanVar1: false, subVar: {someBooleanVar2: true}} 
}); 

的问题是,在服务器someBooleanVar1和someBooleanVar2将被接收为字符串“假”和“真”,但不为“0”和“1”。有没有办法自动将布尔变量转换为“1”和“0”?jQuery.ajax()和发送请求的布尔参数

回答

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); 
0

不是真的自动但是增加0将布尔转换为0或1:

data : {someBooleanVar1: false + 0, someBooleanVar2: true + 0} 
+0

所以我需要每次都传递一些可以是布尔值的参数来做到这一点?不用了,谢谢! – barbushin 2011-02-08 13:36:25

+0

@Senior你期待什么?某种全局JS设置会导致布尔变成1或0? – 2011-02-08 13:48:04

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); 
0

这是姜毅的回答修复。如果你调用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); 
1

我知道这个帖子是有点老,但我还是想通过这个信息^^ 我通过增值经销商到PHP并赶上他们:

filter_var($var, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE); 

这样我把字符串转换为布尔true=1false= 假的串是在PHP

也许我读错了问题。但这是我明白:) 与上面的代码,你可以轻松地建立一个功能,并添加更多的过滤器,让一切工作,因为你想:)

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内部执行发送请求之前。